home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TeX 1995 July
/
TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO
/
macros
/
text1
/
macros
/
txt1m403.tex
< prev
next >
Wrap
Text File
|
1991-10-23
|
139KB
|
3,312 lines
% MACROS FOR TEXT1
%
% This work is protected as an unpublished work under
% U.S. copyright laws.
% Copyright 1987, by Washington State University.
% All rights reserved.
%
% Last updated on 9/4/91
%
\everyjob{\immediate\write16{TEXT1 Version 4.03}
\titlepage\spn{1}
}
% If this is for the Macintosh, use the alternate \include code
%
% Here are the changes necessary for the IBM PC/DOS version of TEXT1.
%
% 1. The filetype (extension) can only be 3 characters at the most
% for the PC/DOS version.
% This requires the following changes:
% toc1 => tc1
% toc2 => tc2
% toc3 => tc3
% endnotes => end
% textext => txt
% texmath => mth
% texmodel => mdl
%
% 2. The Compugraphics dependent stuff in \selectspecificfont must
% be omitted.
%
% 3. The routines \nonIBM and \IBM should be set to null
%
%
\catcode`* = 11
\catcode`@ = 11
%
% Some temporary variables to be used throughout
%
\newbox\A
\newtoks\B
\newskip\C
\newdimen\D
\newdimen\*D
\newcount\E
\newcount\F
\newcount\G
\newcount\N
\newcount\Q
\newcount\R
% \T \U \V \W are used throughout TEXT1 as temp definitions
% \I \J \K \M \X \Y \Z are temporary too, be careful if you use these
%
% ragged rightindent on bq troublesome.
% titleleadskip works only with titlepage command in text.
% for doublecolumns, change hsize and line--refer to ccndbl
% for multiple right and centerline--refer to aztex
%
% IBM/NONIBM character definitions, added by Dean 7/11/86
%
% Use this macro when not printing with IBM standard distribution fonts
%\newif\if*IBM \*IBMfalse
\def\nonIBM{}%\if*IBM \*IBMfalse%
% \def\aa{\accent23a}%
% \def\AA{\leavevmode\setbox0\hbox{h}\dimen@\ht0\advance\dimen@-1ex%
% \rlap{\raise.67\dimen@\hbox{\char'27}}A}%
% \def\c##1{\setbox\z@\hbox{##1}\ifdim\ht\z@=1ex\accent24 ##1%
% \else{\ooalign{\hidewidth\char24\hidewidth\crcr\unhbox\z@}}\fi}%
% \def\`##1{{\accent18 ##1}}%
% \def\'##1{{\accent19 ##1}}%
% \def\^##1{{\accent94 ##1}}\let\^^D=\|%
% \def\~##1{{\accent"7E ##1}}%
% \def\"##1{{\accent"7F ##1}}%
% \chardef\i="10 % dummy dotless lowercase i
% \def\dag{\mathhexbox279}%
% \def\ddag{\mathhexbox27A}%
% \def\S{\mathhexbox278}%
% \def\P{\mathhexbox27B}%
% \let\}=\rbrace%
% \let\{=\lbrace%
% \def\cents{\hbox{\rm\rlap/c}}\fi}% end non-IBM
%
% Use this macro when printing with the IBM standard distribution fonts
\def\IBM{}%\*IBMtrue
% \chardef\aa="8A % a overcircle
% \chardef\AA="8B % A overcircle
% \chardef\c="18 % cedilla
% \chardef\`="12 % grave
% \chardef\'="13 % acute
% \chardef\^="5E % circumflex
% \chardef\~="7E % tilde
% \chardef\"="7F % umlaut
% \chardef\i="69 % dummy dotless lowercase i
% \chardef\S="DC % section number sign
% \chardef\P="DD % paragraph sign or pilcrow
% \chardef\dag="DE % dagger or obelisk
% \chardef\ddag="DF % double dagger or diesis
% \chardef\{="AE % left brace
% \chardef\}="AF % right brace
% \chardef\cents="CD}% end IBM
%
% Redefined from PLAIN.TEX to omit the at sign "@"
% @ symbol will be read as begin and end math mode otherwise
\newdimen\zZ \zZ=0pt % can be used both for 0pt and 0
\mathchardef\zmz=1000
\mathchardef\zMz=10000
\mathchardef\zMMz=20000
\def~{\penalty\zMz\ } % tie
\def\break{\penalty-\zMz}
\def\nobreak{\penalty \zMz}
\def\allowbreak{\penalty \zZ}
\def\supereject{\par\penalty-\zMMz}
\def\nopagenumbers{\rhf{\bothpages{}}\rff{\bothpages{}}}
%
% Redefined from PLAIN.TEX to \unskip last skip if in h mode
%
\def\removelastskip{\ifvmode\ifdim\lastskip=\z@\else\vskip-\lastskip\fi
\else\unskip\unskip\unskip\unskip\fi}
\let\rlsk=\removelastskip
%
% Redefined from PLAIN.TEX to 12 point topskip
\def\raggedbottom{\topskip 12\p@ plus60\p@ \r@ggedbottomtrue}%
\def\normalbottom{\topskip 12\p@ \r@ggedbottomfalse}%
%
% Redefined from PLAIN.TEX to omit extraneous skips and such surprises.
\def\endinsert{\egroup % finish the \vbox
\if@mid \dimen@\ht\z@ \advance\dimen@\dp\z@
\advance\dimen@12\p@ \advance\dimen@\pagetotal
\ifdim\dimen@>\pagegoal\@midfalse\p@gefalse\fi\fi
\if@mid \box\z@\goodbreak
\else\insert\topins{\penalty100 % floating insertion
\splittopskip\z@skip
\splitmaxdepth\maxdimen \floatingpenalty\z@
\ifp@ge \dimen@\dp\z@
\vbox to\vsize{\unvbox\z@\kern-\dimen@}% depth is zero
\else \box\z@\nobreak\fi}\fi\endgroup}
%
% Redefined from PLAIN.TEX to take mode into account
\mathchardef\*dda="227A
\mathchardef\*dag="2279
\mathchardef\*neg="023A
\def\ddagger{\relax\ifmmode\*dda\else$\*dda$\fi}%
\def\dagger{\relax\ifmmode\*dag\else$\*dag$\fi}%
\def\neg{\relax\ifmmode\*neg\else$\*neg$\fi}
%
% Redefined from PLAIN.TEX to take present font size into account
%
\def\strut{\relax
\setbox\strutbox=\hbox{\vrule height 1.8ex depth .6ex width 0pt}%
\ifmmode\copy\strutbox\else\unhcopy\strutbox\fi}%
%
%
% Starting TEXT1 Definitions
%
% Use this one for Textures
%
%\def\include#1{\special {picture #1}}%
%
\def\include#1{\special {IPS #1}}% added by gap 1/27/87
\let\incl=\include
%
\def\text#1{{\it\TeX T1}}% added by drg 9/26/86
\def\bf{\bd}% added by jkw 6/30/86
\def\cents{\hbox{\rm\rlap/c}}% added by jkw 6/30/86
\def\fraction#1/#2 {% added by jkw 7/8/86
\leavevmode\kern.1em \raise.6ex\hbox{\the\scriptfont0 #1}\kern-.1em
/\kern-.15em\lower.25ex\hbox{\the\scriptfont0 #2}}
\let\frac=\fraction
% Bibliography
%
\newtoks\bi*f \bi*f={\goodbreak\vs{1\bl}\hp\nin} % init bibentry
\newtoks\bi*t \bi*t={\dumpinsertseject\cl{\bd\bibtitle}
\vs{1\bl}}% init bibliography title format
\newtoks\bi*r \bi*r={width 3em height .6ex depth -.5ex}
\newcount\bi*n \bi*n=0 % counter for numbered bibliography
\newif\if*TC*bib \*TC*bibtrue
%
\long\def\bibliographyformat#1{{% definition of bibliographic format
\def\incontents##1{\global\*TC*bibtrue
\edef\T{##1}%
\edef\U{yes}%
\edef\V{no}%
\ifx \T\U % Already true
\else \ifx \T\V \global\*TC*bibfalse
\else \message{<TEXT1> Warning, argument to
incontents in bibliographyformat is not "yes" or "no".
"yes" will be assumed}
\fi\fi}%
\long\def\everybibentry##1{\global\bi*f={##1}}%
% Remove this some day
\let\bibentryformat=\everybibentry%
\long\def\titleformat##1{\global\bi*t={##1}}% replacement format for bibliography title
\def\sameauthorrulesize##1{\global\bi*r={##1}}%
#1}}%
\let\bif=\bibliographyformat
%
\def\bibtitle{}
\def\bibliography#1{% calls bibtitle format and passes title
\global\bi*n=0 % set bib counter to zero each call
\global\def\bibtitle{#1} % collect title tokens
\par
{\the\bi*t}
\if*TC*bib \putincontents1{\the\*btf}\fi % call bib title format
\ignorespaces}% end bibliography markup
\let\bib=\bibliography
%
\def\bibnumber{\the\bi*n}%
\def\bibentry{\par\global\advance\bi*n by1\the\bi*f}%
\let\bie=\bibentry % abbreviation for \bibentry
%
\def\sameauthor{\vrule\the\bi*r}%
\let\sau=\sameauthor
%
\def\underscore#1{$\underline{\smash{\hbox{#1}}}$}%
\let\us=\underscore
\def\leader{\leaders\hbox to 8pt{\hss.\hss}\hfill}%
%
\def\hyphenoff{\pretolerance=10000\hbadness=10000}%
\let\hof=\hyphenoff
\def\hyphenon{\pretolerance=100\hbadness=1000}%
\let\hon=\hyphenon
%
\def\today{\ifcase\month\or
January\or February\or March\or April\or May\or June\or
July\or August\or September\or October\or November\or December\fi
\space\number\day,\space\number\year}%
%
%
\def\tilde{\relax\ifmmode\mathaccent"707E % relax added to trigger math
\else{\sy\char'030}\fi}% mode in tabs 1/27/87
%
\def\_{\leavevmode \kern.06em \vbox{\hrule width.3em}}%
%
\def\}{\relax\ifmmode \rbrace % relax added to trigger math mode in tabs
\else $\rbrace$\fi}%
%
\def\{{\relax\ifmmode \lbrace % relax added to trigger math mode in tabs
\else $\lbrace$\fi}%
%
\def\\{\relax\ifmmode \delimiter"26E30F % relax added to trigger math
\else $\delimiter"26E30F$\fi}% mode in tabs
%
\let\leftsquarebracket=[
\let\rightsquarebracket=]
\let\lsb=[
\let\rsb=]
\def\~#1{{\relax\ifmmode\mathaccent"707E % relax added to trigger math
\else \accent"7E #1\fi}}% mode in tabs
%
% baselineskip = interlineskip
%
\newskip\*isk
\newskip\baseline
\let\bl=\baseline
\def\interlineskip#1{\baselineskip=#1%
\baseline=#1%
\*isk=#1\relax}%
\let\isk=\interlineskip
%
\newfam\bifam \newfam\ccfam
%
% The \selectfontset macros are by JKW
%
\newtoks\naMEtok
\newtoks\maTHtok
\newskip\bAseSkip
\def\selectfontset#1#2#3{\naMEtok={#2}
\edef\T{default}%
\edef\U{#3}%
\ifx\U\T \bAseSkip=0pt
\else \bAseSkip=#3\fi
\input #1.txt }%
\let\sfs=\selectfontset
\sfs{cm12}{twelvept}{default}
\sfs{cm10}{tenpt}{default}
\twelvept
%
\def\selectmathset#1#2{\maTHtok={#2}\input #1.mth}%
\let\sms=\selectmathset
\selectmathset{cm97m}{mathdefault} %
\mathdefault
%
% SELECT SPECIFIC FONT, jkw 8/26/86
\newread\ckfnt
\newif\ifnotcfend
\newtoks\nUMtok
\newtoks\nmtok
\def\selectspecificfont#1#2#3{\naMEtok={#1}\nUMtok={#3}
\nmtok={#1\romannumeral #2}
\def\T{\uppercase{#1 }}%
\expandafter\xdef\csname I\the\nmtok\endcsname{\isk{\the\nUMtok}}
% \openin\ckfnt=cgfonts.lclist
% \loop\read\ckfnt to \W
% \edef\U{\uppercase{\W}}%
% \ifx\U\T
% \expandafter\font\csname F\the\nmtok%
% \endcsname=#1 at #2 pt \notcfendfalse
% \else\ifeof\ckfnt
\expandafter\font\csname F\the\nmtok%
\endcsname=#1#2 %\notcfendfalse
% \else\notcfendtrue\fi\fi
% \ifnotcfend \repeat
% \closein\ckfnt
\expandafter\xdef\csname\the\naMEtok\endcsname ##1;{%
\noexpand\csname F\the\naMEtok
\noexpand\romannumeral\noexpand ##1\noexpand\endcsname
\noexpand\csname I\the\naMEtok
\noexpand\romannumeral\noexpand ##1\noexpand\endcsname}}%
\let\ssf=\selectspecificfont
%
\skewchar\teni='177 \skewchar\seveni='177 \skewchar\fivei='177
\skewchar\tensy='60 \skewchar\sevensy='60 \skewchar\fivesy='60
%
\setbox0=\hbox{\tenex B} \p@renwd=\wd0 % width of the big left (
%
%
\newif\if*msp \*mspfalse
\def\monospace{%
\global\*msptrue % changed to global 6/27/86 bth
\sfs{monofont}{defaultmono}{default}
\defaultmono
\gdef\underscore##1{{\italicfont ##1}}%
\global\let\us=\underscore
\special{fonts=10cpi}
\raggedbottom
\global\paragraphskip{0pt}
\global\paragraphindent{36pt}
\gdef\tilde{\ifmmode\mathaccent"707E%
\else \char'176{}\fi}%
\gdef\_{\char'137{}}%
\gdef\}{\ifmmode \rbrace
\else \char'175{}\fi}%
\gdef\{{\ifmmode \lbrace
\else\char'173{}\fi}%
\gdef\\{\ifmmode \delimiter"26E30F%
\else\char'134{}\fi}%
\gdef\neg{\char'136{}}%
\gdef\ellipsis##1{{\def\U{\message{<TEXT1> Error! Only 3 or 4 are valid for ellipsis. Command ignored.}}
\ifcase ##1\U\or\U\or\U%
\or .~.~.
\or .~.~.~.
\else\U\fi}}%
\tableofcontentsformat{% added 1/26/87 Guenther
\toctitle{\centerline{\bd Table of Contents}
\vs{1\bl}}
\figuretoctitle{\newpage
\centerline{\bd List of Figures}
\line{Figure \rt{Page}}}
\tabletoctitle{\newpage
\centerline{\bd List of Tables}
\line{Table \rt{Page}}}
}% end table of contents format
\global\let\el=\ellipsis
\asisformat{\skipbefore{1\bl}\everyasis{\leftindent{0pt}}\skipafter{1\bl}}
\blockquoteformat{\skipbefore{1\bl}\everyblockquote{\rm\leftindent{36pt}\rightindent{36pt}}\skipafter{1\bl}}
\figureformat{\titleformat{\bqb\bd\hp Figure \figurenumber. \figuretitle \bqe}}
\tableformat{\titleformat{\vs{\bl}\cl{\bd Table \tablenumber}
\cl{\rm\tabletitle}\vs{\bl}}}
\endnoteformat{\skipbefore{0\bl}\notereferencefont{\rm}\everyendnote{\rm\lin{0pt}}}
\footnoteformat{\textreferenceposition{down}\textreferencefont{\rm}\textreferencestyle{(1)}
\notereferencefont{\rm}\everyfootnote{\rm\pin{.5in}\psk{.5in}\lin{0pt}\rin{0pt}}}
\partformat{\titleformat{\dumpinsertseject\titlepage
\hrule height0pt depth0pt \vfil
\cl{\bd Part \partnumber}\cl{\bd\parttitle}\np
\scn{0}\ssan{0}\ssbn{0}\sscn{0}\ssdn{0}
\sfn{0}\stn{0}\sfnn{0}\senn{0}}}% end part format
\indexformat1{\everyindex{\rm}}
\indexformat2{\everyindex{\rm}}
\indexformat3{\everyindex{\rm}}
\chapterformat{\titleformat{\dumpinsertseject\cl{\bd Chapter \chapternumber}\cl{\bd\chaptertitle}\vs{1\bl}
\ssan{0}\ssbn{0}\sscn{0}\ssdn{0}}}% end chapter format
\prefaceformat{\titleformat{\dumpinsertseject\cl{\bd\prefacetitle}
\vs{1\bl}\ssan{0}\ssbn{0}\sscn{0}\ssdn{0}}}% end preface format
\appendixformat{\titleformat{\dumpinsertseject
\cl{\bd Appendix \appendixnumber}\cl{\bd\appendixtitle}\vs{1\bl}
\scn{0}\ssan{0}\ssbn{0}\sscn{0}\ssdn{0}\sfn{0}\stn{0}}}% end appendix format
\subheadaformat{\titleformat{\removelastskip\goodbreak\vs{2\bl}
\bd\nin\subheadatitle\par\nobreak\vs{1\bl}\nobreak
\ssbn{0}\sscn{0}\ssdn{0}}}% end subheadaformat markup
\subheadbformat{\titleformat{\removelastskip\goodbreak\vs{2\bl}
\it\nin\subheadbtitle\par\nobreak\vs{1\bl}\nobreak
\sscn{0}\ssdn{0}}}% end subheadbformat markup
\subheadcformat{\titleformat{\removelastskip\goodbreak\vs{2\bl}
\nin\subheadctitle\par\nobreak\vs{1\bl}\nobreak\ssdn{0}}}% end subheadc format markup
\subheaddformat{\titleformat{\goodbreak{\it \subheaddtitle.}}}% end subheadd markup
\runningheadformat{\bothpages{\line{\rm\lft{}\ctr{}\rt{\pagenumber}}
\vs{1\bl}}}% end runningheadformat markup
}% END monospace markup definition
\let\msp=\monospace
%
\def\sl{\message{<TEXT1> Warning! The slanted font is not in font sets. Only tensl is used.}\tensl}%
%
% Ellipsis command 10/22/85
%
\def\ellipsis#1{{\def\U{\message{<TEXT1> Error! Only 3 or 4 are valid for ellipsis. Command ignored.}}
\ifcase #1\U\or\U\or\U%
\or \ifmmode\mathinner{\ldotp\ldotp\ldotp}
\else$\mathinner{\ldotp\ldotp\ldotp}$\fi
\or \ifmmode\mathinner{\ldotp\ldotp\ldotp\ldotp}
\else\removelastskip$\ldotp\ldotp\ldotp\ldotp$\fi
\else\U\fi}}%
\let\el=\ellipsis
%
% dumpinsertseject is plain.tex \dosupereject with and \else added
%
\def\dumpinsertseject{\ifnum\insertpenalties>\z@ % something is being held over
\line{}\kern-\topskip\nobreak\vfill\supereject
\else \newpage
\fi}% END dumpinsertseject markup definition
\let\die=\dumpinsertseject
%
\newif\if*tempif
%
% Pageformat command
%
\newdimen\pg*l \pg*l=11in % page length
\newdimen\pg*t \pg*t=0in % top margin set for 1in origin
\newdimen\pg*b \pg*b=2in % bottom margin set for 1in origin
\newdimen\pg*w \pg*w=8.5in % page width
\newdimen\pg*r \pg*r=2in % right margin set for 1in,
\newdimen\*lmar \*lmar=0.2in % left margin set for 1in
% Note: TEX origin at 1in,1in
\newdimen\pg*a \pg*a=0in
\hsize=6.3in \hoffset=0.2in
\vsize=9in \voffset=0in
%
\def\pageformat#1{{\par
\def\pagelength##1{\global\pg*l=##1
\cpt*vs}%
\def\topmargin##1{\global\pg*t=##1
\global\advance\pg*t by- 1in % set margin 1in,1in
\cpt*vs}%
\def\bottommargin##1{\global\pg*b=##1
\global\advance\pg*b by 1in % set margin 1in,1in
\cpt*vs}%
\def\pagewidth##1{\global\pg*w=##1\cpt*hs}%
\def\rightmargin##1{\global\pg*r=##1
\global\advance\pg*r by 1in % set margin 1in,1in
\cpt*hs}%
\def\leftmargin##1{\global\*lmar=##1
\global\advance\*lmar by -1in % set margin 1in,1in
\cpt*hs}%
\def\bindingadjust##1{\global\pg*a=##1\cpt*hs}%
\def\galleywidth##1{\global\pg*w=##1 \global\advance\pg*w by\*lmar
\global\advance\pg*w by\pg*r \cpt*hs}%
#1}}% End pageformat markup definition
\let\pf=\pageformat
%
% set page text size, compute hsize
%
\def\cpt*hs{% COMPUTE HORIZONTAL SIZE
\global\hoffset=\*lmar
\global\hsize=\pg*w % added global 11/11/86 bth
\global\advance\hsize by-\pg*r % ""
\global\advance\hsize by-\*lmar % ""
\global\*txtw=\hsize}% added for multi column routines
%
% set page text size, vsize
%
\def\cpt*vs{% COMPUTE VERTICAL SIZE
\global\voffset=\pg*t
\global\vsize=\pg*l
\global\advance\vsize by-\pg*t
\global\advance\vsize by-\pg*b
\if*title \global\advance \voffset by \tp*sk % lines from titlepage
\global\advance \vsize by -\tp*sk % from titlepage
\fi
\global\*txth=\vsize}% added for multi column routines
%
% left center right
%
\def\lft#1{#1\hfill}
\def\ctr#1{\hfill #1\hfill}
\def\rt#1{\hfill #1}
%
% Page numbers
%
\def\setpagenumber#1{\global\pageno=#1}%
\let\spn=\setpagenumber
\def\pagenumber{\ifnum \pageno<0 \romannumeral-\pageno
\else \number\pageno\fi}%
\let\pn=\pagenumber
%
\def\rule{\vskip 1\baselineskip\hrule}%
%
% Running heads
%
\newif\if*title
%
\newtoks\rh*r \rh*r={\line{\twelvept\rt{\pagenumber}}\vs{\bl}}
\newtoks\rh*l \rh*l={\line{\twelvept\rt{\pagenumber}}\vs{\bl}}
\newtoks\rf*r \rf*r={}
\newtoks\rf*l \rf*l={}
%
\def\runningheadformat#1{{%
\def\*ttitle##1{\setbox\A=\vbox{##1}%
\D=\ht\A
\advance\D by -1in
\ifdim \D>\pg*t
\global\pg*t=\D
\global\advance\pg*t by 12pt
\advance\D by 1in
\message{<TEXT1> Warning, the top margin you
have specified is less than the
running top title. The top margin will
be changed to \the\D}
\cpt*vs
\fi
\if*tempif \global\rh*l={\hrule width\hsize
height0pt depth0pt ##1}
\else \global\rh*r={\hrule width\hsize
height0pt depth0pt ##1}\fi
}% end *ttitle definition
\def\evenpages##1{\*tempiftrue\*ttitle{##1}}%
\def\oddpages##1{\*tempiffalse\*ttitle{##1}}%
\def\bothpages##1{\*tempiftrue\*ttitle{##1}
\*tempiffalse\*ttitle{##1}}%
\relax
#1
}}% END runningheadformat markup definition
\let \rhf = \runningheadformat
%
\def\runningfootformat#1{{%
\def\*btitle##1{\setbox\A=\vbox{##1}%
\D=\ht\A
\advance\D by 1in
\ifdim \D>\pg*b
\global\pg*b=\D
\global\advance\pg*b by 12pt
\advance\D by -1in
\message{<TEXT1> Warning, the bottom margin
you have specified is less than height of the
running bottom title.
The bottom margin will be
changed to \the\D}
\cpt*vs
\fi
\if*tempif \global\rf*l={##1}
\else \global\rf*r={##1}\fi
}% end of bottomline
\def\evenpages##1{\*tempiftrue\*btitle{##1}}%
\def\oddpages##1{\*tempiffalse\*btitle{##1}}%
\def\bothpages##1{\*tempiftrue\*btitle{##1}
\*tempiffalse\*btitle{##1}}%
\relax
#1}}% END runningfootformat markup definition
\let \rff = \runningfootformat
%
\newdimen\tp*sk \tp*sk=1in
\newtoks\tp*fl \tp*fl={}
\def\titlepageformat#1{{%
\def\titleleadskip##1{\global\tp*sk=##1}%
\def\titlefootline##1{\global\tp*fl={##1}}%
\relax
#1
\titlepage}} %end of titlepageformat
\let \tpf = \titlepageformat
%
\def\titlepage{\global\*titletrue
\cpt*vs}%
\let\tp=\titlepage
\def\notitlepage{\global\*titlefalse
\cpt*vs}%
\let\ntp=\notitlepage
%
%
% Output changed to permit binding adjust
%
\output={\*mkpg}
%
\def\*mkpg{\*badj
\plainoutput
\if*title \notitlepage\fi
\ifnum\*pcount>0 \*blkpg\fi}% insert blank page
%
\def\makeheadline{% headline set for multiple and single column modes
\if*title% Do nothing if its a title page
\else \setbox\A=\vbox{\hsize=\the\*txtw % hsize added to allow
\ifodd\pageno\the\rh*r % headline to print the
\else\the\rh*l\fi} % full width in multi
\vbox to 0pt{\vskip-\ht\A\box\A\vss} % column mode
\fi} % This could replace the TEXT1@@ definition
%
\def\makefootline{\if*title \vbox to 0pt{\hsize=\the\*txtw\the\tp*fl\vss}
\else\vbox to 0pt{\hsize=\the\*txtw\ifodd\pageno\the\rf*r
\else\the\rf*l\fi\vss} % hsize added for multi column mode
\fi} % This could replace the TEXT1@@ definition
%
\def\*badj{\ifdim\pg*a=\z@ % do nothing if binding adjust absent
\else
\ifodd\pageno % Binding adjust markup (revised 2/03/87
\global\hoffset=\*lmar % offset equals left margin value
\global\advance\hoffset by\pg*a % plus binding adjust
\else
\global\hoffset=\*lmar % offset equals left margin value
\global\advance\hoffset by-\pg*a % plus binding adjust
\fi\fi}% end binding adjust markup
%
% linebreak
%
\def\linebreak{\null\hfil\break}
\let\lbr=\linebreak
\let\toclinebreak=\linebreak
\let\toclbr=\linebreak
%
% Horizontal skip
%
\def\horizontalspace#1{\null\hskip#1\relax}%
\let\hs=\horizontalspace
%
% skip down
%
\def\verticalspace#1{\vskip #1\relax}%
\let\vs=\verticalspace
%
\def\verticalspacekeep#1{\par
\hbox{\vbox{\vskip #1\relax}}}%
\let\vsk=\verticalspacekeep
%
% raggedright (as TeX basic)
%
\newdimen\r*sk \r*sk=0pt % dimension to save right skip
\def\rightragged{\par \r*sk=\rightskip \*rrtrue
\if*msp \rightskip=\r*sk plus10em
\spaceskip=1em \xspaceskip=1em
\else \rightskip=\r*sk plus2em\relax
\spaceskip=.3333em \xspaceskip=.5em
\fi}
\let\rr=\rightragged
%
% leftragged
%
\newdimen\l*sk \l*sk=0pt % dimension to save left skip
\def\leftragged{\par %
\l*sk=\leftskip
\spaceskip=.35em
\xspaceskip=.55em
\parfillskip=0pt
\leftskip=\l*sk plus2em\relax}
\let\lr=\leftragged
%
\newif\if*rr \*rrfalse
\def\justify{\par
\rightskip=\r*sk
\*rrfalse
\leftskip=\l*sk
\spaceskip=0pt \xspaceskip=0pt
\parfillskip=0pt plus1fil\relax}
\let\ju=\justify
%
% spacing
%
\def\singlespace{\par\baselineskip=\*isk}
\let\ssp=\singlespace
\def\doublespace{\par\baselineskip=2\*isk}
\let\dsp=\doublespace
%
% paragraph
%
\let\paragraph=\par
\def\paragraphindent#1{\parindent=#1}
\let\pin=\paragraphindent
\def\paragraphskip#1{\parskip=#1}
\let\psk=\paragraphskip
%
% noindent
%
\let\nin=\noindent
%
% hanging paragraph macro
%
\newdimen\*hin \*hin=24pt
\def\hangingindent#1{\*hin=#1}
\let\hin=\hangingindent
%
\def\hangingparagraph{\par
\hangindent=\*hin
\hangafter=1
\noindent}
\let\hp=\hangingparagraph
\newif\if*mnr \*mnrfalse % left/right margin note indicator
\newtoks\e*mn \e*mn={\tenpt\rr} % every margin note tokens
\newtoks\*mnw \*mnw={54pt} % margin note width tokens
\newtoks\*mngut \*mngut={6pt} % margin note gutter tokens
%
% Margin Note markup
%
\def\marginnoteformat#1{% MARGINAL NOTE FORMAT
\def\position##1{% "left" or "right" margin note check
\edef\T{##1}%
\edef\U{left}%
\edef\V{right}%
\ifx \T\U \global\*mnrfalse % left margin notes true
\else\ifx \T\V \global\*mnrtrue % right margin notes true
\else\global\*mnrfalse % default, improper entry
\write16{<TEXT1> You must specify "left" or "right" in %
the marginnoteformat markup. Left is the default.}%
\fi\fi}% end margin note check
\def\notewidth##1{\global\*mnw={##1}}% note width variable
\def\notegutter##1{\global\*mngut={##1}}% gutter width variable
\def\everymarginnote##1{\global\e*mn={##1}}% token variable
#1}% insert arguments, END marginnoteformat
\let\mnf=\marginnoteformat % set marginnoteformat abbreviation
%
\long\def\marginnote#1{% BEGIN MARGIN NOTE MACRO
\special{MARGINNOTE=true} % added 6/30/87 jkw for 8600 line numbering
\ifvmode\leavevmode\fi % can't use vadjust in vertical mode
\bgroup % begin margin note routine
\def\rightragged{\r*sk=\rightskip \*rrtrue
\if*msp \rightskip=\r*sk plus10em %
\spaceskip=1em \xspaceskip=1em %
\else \advance\rightskip by 0pt plus1fil\relax %
\spaceskip=.35em \xspaceskip=.55em %
\fi}% par removed from TEXT1 version %
\let\rr=\rightragged %
%
\tolerance=6000 % increase line-breaking tolerance
\hbadness=6000 % increase warning tolerance
\strut % sets line depth for vadjust
\D=\dp\strutbox % capture depth of current line
\the\e*mn % every margin note tokens
\strut % sets strut to margin note font
\parskip=0pt % cancel any paragraph skip
\if*mnr % right margin notes true
\vadjust{ % make whats'it in text
\rlap{\smash{ % rightlap, make note depth zero
\hskip\hsize % skip to right margin
\hskip\the\*mngut % make gutter
\vtop{\hsize=\the\*mnw % set reference point, new hsize
\kern-\D % kern depth of current text line
\kern-\ht\strutbox % kern height of margin note text
\nin#1}}}}% % input margin note text
\else % left margin notes true
\vadjust{ % make whats'it in text
\llap{\smash{ % leftlap, make note depth zero
\vtop{\hsize=\the\*mnw % gather vertical material with
\kern-\D % kern depth of current text line
\kern-\ht\strutbox % kern height of margin note text
\nin#1}% reference point at the top
\hskip\the\*mngut}}}% make margin note gutter
\fi %
\egroup % end margin notes routine
\ignorespaces}% END margin note macro
\let\mn=\marginnote
%
%
% labeled definition macro
%
\newdimen\la*w \la*w=1in % Label width
\newtoks\la*g \la*g={1em} % Label gutter
\newtoks\la*s \la*s={1\bl} % Skip before label
\newtoks\la*f \la*f={\rm} % Label font
%
\long\def\label#1{\par\vskip\the\la*s
\setbox\A=\vtop{\hsize=\la*w
\leftskip=0pt
\rightskip=0pt plus2em
\tolerance=1600
\noindent
\the\la*f
#1}%
\hangindent=\la*w
\advance \hangindent by \the\la*g
\hangafter=1
\noindent
\setbox0=\hbox{\rlap{\box\A}}\ht0=0pt\dp0=0pt\box0%
\hskip\la*w
\hskip\the\la*g
\ignorespaces}
\let\la=\label
%
\def\labelformat#1{{\def\skipbefore##1{\global\la*s={##1}}%
\def\labelwidth##1{\global\la*w=##1}%
\def\gutter##1{\global\la*g={##1}}%
\def\everylabel##1{\global\la*f={##1}}%
#1}}% End labelformat
\let\laf=\labelformat
%
% leftindent
%
\newif\if*ok
\newif\if*zero
\def\leftindent#1{\par
\*zerofalse
\*okfalse
\e*p#1\end%
\if*zero \leftskip 0pt \fi
\advance \leftskip by #1
\l*sk=\leftskip % l*sk used in justify reset
}%
\let\lin=\leftindent
%
\def\rightindent#1{\par
\*zerofalse \*okfalse
\e*p#1\end%
\if*zero \rightskip 0pt \fi
\advance \rightskip by #1
\if*rr\rr\fi
\r*sk=\rightskip}% r*sk used in justify reset
\let\rin=\rightindent
%
% \e*p will determine if the parm value passed to \leftindent
% or \rightindent is to be relative to the previous indent, which means a
% "+" or "-" will appear in front of the indent value. If no "+" or "-",
% then the indent is to be absolute from the original left margin.
%
\def\e*p#1{\ifx #1\end \let \next = \relax% e*p => Evaluate Parameter
\else \if*ok \let \next = \e*p
\else \global\*oktrue
\ifx #1+ \let \next = \e*p
\else \ifx #1- \let \next = \e*p
\else \*zerotrue
\let \next = \e*p
\fi\fi\fi\fi \next}
%
% Blockquote
%
\newskip\bq*sb \bq*sb = 6pt % Default skip before
\newskip\bq*sa \bq*sa = 6pt % Default skip after
\newtoks\bq*f \bq*f={\tenpt\leftindent{24pt}\rightindent{24pt}}
%
\def\blockquoteformat#1{{%
\def\everyblockquote##1{\global\bq*f={##1}}%
\def\skipbefore##1{\global\bq*sb=##1\relax}%
\def\skipafter##1{\global\bq*sa=##1\relax}%
#1}} %end of blockquoteformat
\let\bqf=\blockquoteformat
%
\def\blockquotebegin{\par\vskip\bq*sb\relax\begingroup
\the\bq*f }
\let\bqb=\blockquotebegin
\def\blockquoteend{\par\endgroup\vskip\bq*sa\relax}
\let\bqe=\blockquoteend
%
%
%
%
% Footnote
%
% The "tfn" prefixed values are for the reference in the text of
% the document.
%
\newif\if*tfn*dnum \*tfn*dnumfalse %"1." style
\newif\if*tfn*unum \*tfn*unumtrue %"1" style
\newif\if*tfn*pnum \*tfn*pnumfalse %"(1)" style
\newif\if*tfn*dlet \*tfn*dletfalse % "a." style
\newif\if*tfn*ulet \*tfn*uletfalse % "a" style
\newif\if*tfn*plet \*tfn*pletfalse % "(a)" style
\newif\if*tfn*rbe \*tfn*rbefalse % reference after word
\newif\if*tfnupchar \*tfnupchartrue %
\newtoks\*tfn*rfont \*tfn*rfont={\tenpt\rm}
%
% The "nfn" prefixed values are for the reference as it is formatted
% at the bottom of the page.
%
\newif\if*nfn*dnum \*nfn*dnumtrue %"1." style
\newif\if*nfn*unum \*nfn*unumfalse %"1" style
\newif\if*nfn*pnum \*nfn*pnumfalse %"(1)" style
\newif\if*nfn*dlet \*nfn*dletfalse % "a." style
\newif\if*nfn*ulet \*nfn*uletfalse % "a" style
\newif\if*nfn*plet \*nfn*pletfalse % "(1)" style
\newif\if*nfnupchar \*nfnupcharfalse % reference is not superscript
\newtoks\*nfn*rfont \*nfn*rfont={\tenpt\rm}
\newtoks\*nfng \*nfng={1em}
%
\newif\if*fn*llap \*fn*llaptrue
\newtoks\fn*f
\newcount\fn*num
\newdimen\fn*div \fn*div=2in
\newskip\fn*sadiv \fn*sadiv=2.6pt %default skip after divider
\newskip\fn*sbdiv \fn*sbdiv=6pt %default skip before divider
%
\def\footnotenumber{{\if*tfn*dnum \the\fn*num % "1." style
\else\if*tfn*unum \the\fn*num % "1" style
\else\if*tfn*pnum \the\fn*num % "(1)" style
\else\l*alphatrue \a*c{\fn*num} % "a.", "a", and "(a)"
\fi\fi\fi
\removelastskip}}
%
\def\setfootnotenumber#1{\fn*num=#1}
\let\sfnn=\setfootnotenumber
%
\skip\footins=15pt plus 3pt minus 2pt
\fn*f={\tenpt\pin{20pt}\lin{0in}}
%
\def\footnoteformat#1{{%
\def\everyfootnote##1{\global\fn*f{##1}}%
\def\textreferencestyle##1{%
\global\*tfn*dnumfalse
\global\*tfn*unumfalse
\global\*tfn*pnumfalse
\global\*tfn*dletfalse
\global\*tfn*uletfalse
\global\*tfn*pletfalse
\edef\T{##1}%
\edef\U{(1)}%
\edef\V{1}%
\edef\Y{1.}%
\edef\W{(a)}%
\edef\X{a}%
\edef\Z{a.}%
\ifx\T\U \global\*tfn*pnumtrue
\else\ifx\T\V \global\*tfn*unumtrue
\else\ifx\T\Y \global\*tfn*dnumtrue
\else\ifx\T\W \global\*tfn*plettrue
\else\ifx\T\X \global\*tfn*ulettrue
\else\ifx\T\Z \global\*tfn*dlettrue
\else \message{<TEXT1> Error! textreferencestyle ##1
is not a valid style. Statement ignored.}
\fi\fi\fi\fi\fi\fi}% end reference style
\def\textreferencefont##1{\global\*tfn*rfont{##1}}%
\def\textreferenceplacement##1{\global\*tfn*rbefalse
\edef\T{##1}%
\edef\U{before}%
\edef\V{after}%
\ifx\T\U \global\*tfn*rbetrue
\else\ifx\T\V \global\*tfn*rbefalse
\else \message{<TEXT1> Error! textreferenceplacement ##1
is invalid. Statement ignored.}
\fi\fi}
\def\textreferenceposition##1{\global\*tfnupcharfalse
\edef\T{##1}%
\edef\U{up}%
\edef\V{down}%
\ifx\T\U \global\*tfnupchartrue
\else\ifx\T\V \global\*tfnupcharfalse
\else \message{<TEXT1> Error! textreferenceposition ##1
has an invalid parameter. Statement ignored.}
\fi\fi}
\def\notereferencestyle##1{
\global\*nfn*dnumfalse
\global\*nfn*unumfalse
\global\*nfn*pnumfalse
\global\*nfn*dletfalse
\global\*nfn*uletfalse
\global\*nfn*pletfalse
\edef\T{##1}%
\edef\U{(1)}%
\edef\V{1}%
\edef\Y{1.}%
\edef\W{(a)}%
\edef\X{a}%
\edef\Z{a.}%
\ifx\T\Y \global\*nfn*dnumtrue
\else\ifx\T\U \global\*nfn*pnumtrue
\else\ifx\T\V \global\*nfn*unumtrue
\else\ifx\T\W \global\*nfn*plettrue
\else\ifx\T\X \global\*nfn*ulettrue
\else\ifx\T\Z \global\*nfn*dlettrue
\else \message{<TEXT1> Error! notereferencestyle ##1
is not a valid style. Statement ignored.}
\fi\fi\fi\fi\fi\fi}% end reference style
\def\notereferencefont##1{\global\*nfn*rfont{##1}}%
\def\notereferenceposition##1{\global\*nfnupcharfalse
\edef\T{##1}%
\edef\U{up}%
\edef\V{down}%
\ifx\T\U \global\*nfnupchartrue
\else\ifx\T\V \global\*nfnupcharfalse
\else \message{<TEXT1> Error! notereferenceposition ##1
has an invalid parameter. Statement ignored.}
\fi\fi}%
\def\skipbeforedivider##1{\global\fn*sbdiv=##1\relax}%
\def\footnotedivider##1{\global\fn*div=##1\relax}%
\def\notereferencegutter##1{\global\*nfng={##1}}%
\def\skipafterdivider##1{\global\fn*sadiv=##1\relax}%
#1
\relax
\skip\footins=0pt plus 3pt minus 2pt
\global\advance\skip\footins by \fn*sbdiv\relax%
\global\advance\skip\footins by \fn*sadiv\relax%
}} % end of footnoteformat
\let\fnf=\footnoteformat
%
\def\autofootnote{\global\advance\fn*num by 1
\l*alphatrue
\xdef\I{%
\if*tfn*unum \the\fn*num%
\else \if*tfn*ulet \a*c{\the\fn*num}%
\else \if*tfn*plet (\a*c{\the\fn*num})%
\else \if*tfn*pnum (\the\fn*num)%
\else \if*tfn*dlet \a*c{\the\fn*num}.%
\else \if*tfn*dnum \the\fn*num.%
\fi\fi\fi\fi\fi\fi}%
\def\K{%
\if*nfn*unum \the\fn*num%
\else \if*nfn*ulet \a*c{\the\fn*num}%
\else \if*nfn*plet (\a*c{\the\fn*num})%
\else \if*nfn*pnum (\the\fn*num)%
\else \if*nfn*dlet \a*c{\the\fn*num}.%
\else \if*nfn*dnum \the\fn*num.%
\fi\fi\fi\fi\fi\fi}%
%
\let\@sf=\empty
\ifhmode\edef\@sf{\spacefactor=\the\spacefactor}\fi
\def\J{{\the\*tfn*rfont
\if*tfnupchar \raise.7ex\hbox{\the\*tfn*rfont\I}%
\else {\I}\fi}}%
\if*tfn*rbe \@sf\J\ignorespaces%
\else\unskip\unskip\unskip\unskip\J\@sf\fi
\def\M{{\the\*nfn*rfont
\if*nfnupchar \raise.7ex\hbox{\K}%
\else {\K}\fi}}%
\vfootnote{\M}}
\let\afn=\autofootnote
%
% vfootnote redefined to include fn*f features
% The addition of hsize=txtw in vfootnote for flexibleformat allows the
%
% footnote to print across the full text width at the page bottom.
%
% Footstrut redefined to baselineskip for consistent spacing in footnote
%
%
\def\footnoterule{\vskip-\fn*sadiv\hrule width\fn*div\vskip\fn*sadiv\relax}
%
% redefined from PLAIN TEX to baselineskip. PLAIN TEX
% used the height of a ten point strutbox
%
\def\vfootnote#1{% Vfootnote revised 11/6/86
\insert\footins\bgroup
\if*fix % if fixed mode do nothing to footnote
\else\hsize=\*txtw\fi % else print footnote across full width of page
\interlinepenalty\interfootnotelinepenalty
\setbox\strutbox=\hbox{\vrule height 1.8ex depth .6ex width 0pt}%
\splittopskip\ht\strutbox % top baseline for broken footnotes
\splitmaxdepth\dp\strutbox
\floatingpenalty\@MM
\leftskip\z@skip
\rightskip\z@skip
\spaceskip\z@skip
\xspaceskip\z@skip
\the\fn*f
\def\T{\parindent}% For some odd and unknown reason this def is needed
\ifdim\the\parindent>0pt \global\*fn*llaptrue
\else \ifdim\the\leftskip>0pt \global\*fn*llaptrue
\else \global\*fn*llapfalse\fi\fi
\leavevmode
\if*fn*llap \hbox to 0pt{\hss{#1\hskip\the\*nfng}}%
\else \hbox{#1\hskip\the\*nfng}\fi%
\ignorespaces
\footstrut\futurelet\next\fo@t}% END vfootnote markup definition
%
\def\footstrut{\vbox to\baselineskip{}}
%
% Endnote
%
% The "ten" prefixed values are for the reference in the text of
% the document.
%
\newif\if*ten*num \*ten*numtrue % "[1]", "1" and "(1)" styles
\newif\if*ten*let \*ten*letfalse % "a" and "(a)" styles
\newif\if*ten*paren \*ten*parenfalse % "(1)" and "(a)" styles
\newif\if*ten*sb \*ten*sbtrue % "[1]" style
\newif\if*tenupchar \*tenupcharfalse % reference is not superscripted by
\newtoks\*tenrfont \*tenrfont={\tenpt\rm}
%
% The "nen" prefixed values are for the reference as it is formatted
% at the end of a chapter or the end of the document.
%
\newif\if*nen*num \*nen*numtrue % "[1]", "1", "1." and "(1)" styles
\newif\if*nen*let \*nen*letfalse % "a" and "(a)" styles
\newif\if*nenll*per \*nenll*pertrue % "1." style
\newif\if*nen*paren \*nen*parenfalse % "(1)" and "(a)" styles
\newif\if*nen*sb \*nen*sbfalse % "[1]" style
\newif\if*nenupchar \*nenupcharfalse % reference isn't superscripted
\newtoks\*nenrfont \*nenrfont={\tenpt\rm}
\newdimen\*neng \*neng=1em
%
\newtoks\*enpar
\newcount\en*n
\newskip\en*s \en*s=4pt
%
%
\def\endnotenumber{{\if*ten*num \the\en*n % all numeric styles
\else\l*alphatrue \a*c{\en*n} % all alpha styles
\fi
\removelastskip}}
%
\def\setendnotenumber#1{\en*n=#1}
\let\senn=\setendnotenumber
%
\*enpar={\tenpt\pin{0in}\lin{1.2em}}
%
\def\endnoteformat#1{%
{\def\everyendnote##1{\global\*enpar{##1}}%
\def\textreferencestyle##1{%
\global\*ten*numfalse
\global\*ten*letfalse
\global\*ten*parenfalse
\global\*ten*sbfalse
\edef\T{##1}%
\edef\U{[1]}%
\edef\V{(1)}%
\edef\W{1}%
\edef\X{(a)}%
\edef\Y{a}%
\ifx\T\U \global\*ten*numtrue \global\*ten*sbtrue % st
\else\ifx\T\V \global\*ten*numtrue \global\*ten*parentrue % st
\else\ifx\T\W \global\*ten*numtrue % st
\else\ifx\T\X \global\*ten*lettrue \global\*ten*parentrue % st
\else\ifx\T\Y \global\*ten*lettrue % st
\else \message{<TEXT1> Error! textreferencestyle ##1
is not a valid style. Statement ignored.}
\fi\fi\fi\fi\fi}% end reference style
\def\textreferencefont##1{\global\*tenrfont{##1}}%
\def\textreferenceposition##1{\global\*tenupcharfalse
\edef\T{##1}%
\edef\U{up}%
\edef\V{down}%
\ifx\T\U \global\*tenupchartrue
\else\ifx\T\V \global\*tenupcharfalse
\else \message{<TEXT1> Error! textreferenceposition ##1
has an invalid parameter. Statement ignored.}
\fi\fi}
\def\notereferencestyle##1{
\global\*nen*numfalse
\global\*nen*letfalse
\global\*nen*parenfalse
\global\*nenll*perfalse
\global\*nen*sbfalse
\edef\T{##1}%
\edef\U{[1]}%
\edef\V{(1)}%
\edef\W{1}%
\edef\X{(a)}%
\edef\Y{a}%
\edef\Z{1.}%
\ifx\T\Z \global\*nen*numtrue \global\*nenll*pertrue % style
\else\ifx\T\U \global\*nen*numtrue \global\*nen*sbtrue % st
\else\ifx\T\V \global\*nen*numtrue \global\*nen*parentrue % st
\else\ifx\T\W \global\*nen*numtrue % st
\else\ifx\T\X \global\*nen*lettrue \global\*nen*parentrue % st
\else\ifx\T\Y \global\*nen*lettrue % st
\else \message{<TEXT1> Error! notereferencestyle ##1
is not a valid style. Statement ignored.}
\fi\fi\fi\fi\fi\fi}% end reference style
\def\notereferencefont##1{\global\*nenrfont{##1}}%
\def\notereferenceposition##1{\global\*nenupcharfalse
\edef\T{##1}%
\edef\U{up}%
\edef\V{down}%
\ifx\T\U \global\*nenupchartrue
\else\ifx\T\V \global\*nenupcharfalse
\else \message{<TEXT1> Error! notereferenceposition ##1
has an invalid parameter. Statement ignored.}
\fi\fi}%
\def\notereferencegutter##1{\global\*neng=##1}%
\def\skipbefore##1{\global\en*s=##1}%
\relax
#1}} % end of footnoteformat
\let\enf=\endnoteformat
%
\newlinechar=`\^^J
\newhelp\aenhelp{relax
You may continue if you wish, but I'd be surprised
if your job^^J
finished without any errors when you print the endnotes. }
%
\def\err@#1{\errmessage{TEXT1 error: #1}}
\def\*aenerr{\errhelp=\aenhelp
\catcode`@=11
\errmessage{Results are unpredictable
when you use autoendnote with asisbegin.
Type h for more help}}%
\def\autoendnote{\global\advance\en*n by 1
\if*aib \*aenerr \fi
\l*alphatrue
\edef\I{%
\if*ten*paren (\unskip\fi
\if*ten*sb [\unskip\fi
\if*ten*num \the\en*n\fi
\if*ten*let \a*c{\the\en*n}\fi
\if*ten*paren \unskip)\fi
\if*ten*sb \unskip]\fi}%
\let\@sf=\empty
\ifhmode \edef\@sf{\spacefactor=\the\spacefactor}%
\else \let\@sf=\empty\fi
\unskip\unskip
\if*tenupchar \raise.7ex\hbox{\the\*tenrfont\I}\@sf%
\else {\the\*tenrfont\I}\@sf\fi%
\edef\J{%
\if*nen*paren (\unskip\fi
\if*nen*sb [\unskip\fi
\if*nen*num \the\en*n\fi
\if*nen*let \a*c{\the\en*n}\fi
\if*nenll*per \unskip.\fi
\if*nen*paren \unskip)\fi
\if*nen*sb \unskip]\fi}%
\en*o
\immediate\write\en*f{\par%
\the\*enpar%
\noexpand\ENP{\the\*nenrfont\J}}%
\en*w}
\let\aen=\autoendnote
%
%
% Replace the current lines 1096--1098 in TEXT1@@ with the
% following:
%
\def\ENP#1{\indent\en*i{%
\if*nenupchar \raise.7ex\hbox{\the\*nenrfont#1}%
\else {\the\*nenrfont#1}\fi}}%
%
\def\en*i#1{\hbox to 0pt{\hss{#1}\hskip\*neng}\ignorespaces}
%
\newwrite\en*f
\def\en*o{\immediate\openout\en*f=text1$$.end%
\immediate\write\en*f{\the\*enpar}%
\edef\T{\par\vskip\the\en*s\relax}%
\immediate\write\en*f{\T}%
\global\def\en*o{}%
}
%
\long\def\en*w#1{{\def\rm{\noexpand\rm}\def\it{\noexpand\it}%
\def\underscore{\noexpand\us}\let\us=\underscore%
\def\bd{\noexpand\bd}\def\cc{\noexpand\cc}\def\tt{\noexpand\tt}%
\def\c{\noexpand\c}\def\L{\noexpand\L}\def\AA{\noexpand\AA}%
\def\d{\noexpand\d}\def\O{\noexpand\O}\def\t{\noexpand\t}%
\def\b{\noexpand\b}%
\immediate\write\en*f{#1}}%
}% end definition of en*w
%
\def\printendnotes{\immediate\closeout\en*f%
\begingroup%
\input text1$$.end%
\par%
\endgroup%
\global\def\en*o{\immediate\openout\en*f=text1$$.end%
\immediate\write\en*f{\the\*enpar}%
\edef\T{\par\vskip\the\en*s\relax}%
\immediate\write\en*f{\T}%
\global\def\en*o{}}%
\setendnotenumber{0}}%
\let \pen=\printendnotes
%
%
%
\def\set#1#2{\l*alphafalse
\ifx#2\appendixnumber
\edef\T{\the\*ap*num}%
\E=\*ap*st%
\else\ifx#2\chapternumber
\edef\T{\the\*ch*num}%
\E=\*ch*st%
\else\ifx#2\endnotenumber
\edef\T{\the\en*n}%
\if*ten*num \E=1% % all numeric styles
\else\l*alphatrue \E=2% % all alpha styles
\fi%
\else\ifx#2\figurenumber
\edef\T{\the\fi*n}%
\E=1%
\else\ifx#2\footnotenumber
\edef\T{\the\fn*num}%
\if*tfn*dnum \E=1% % "1." style
\else\if*tfn*unum \E=1% % "1" style
\else\if*tfn*pnum \E=1% % "(1)" style
\else\l*alphatrue \E=2% % "a.", "a", and "(a)"
\fi\fi\fi%
\else\ifx#2\partnumber
\edef\T{\the\*pt*num}%
\E=\*pt*st%
\else\ifx#2\pagenumber
\ifnum \pageno<0 \edef\T{\romannumeral-\pageno}%
\else \edef\T{\number\pageno}\fi%
\E=1%
\else\ifx#2\subheadanumber
\edef\T{\the\*sa*num}%
\E=\sa*st%
\else\ifx#2\subheadbnumber
\edef\T{\the\*sb*num}%
\E=\sb*st%
\else\ifx#2\subheadcnumber
\edef\T{\the\*sc*num}%
\E=\sc*st%
\else\ifx#2\subheaddnumber
\edef\T{\the\*sd*num}%
\E=\sd*st%
\else\ifx#2\tablenumber
\edef\T{\the\ta*n}%
\E=1%
\else\message{<TEXT1> Error! You've entered a number I know nothing
about. I'm going to ignore it and try to proceed.}%
\E=0%
\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi%
\null % So, why is this needed??
\ifcase\E % NOP
\or % set to a digit or lower case roman
\expandafter\xdef\csname#1\endcsname{\T}%
\or % set to a letter (upper or lower)
\expandafter\xdef\csname#1\endcsname{{\a*c{\T}}}%
\or % set to an uppercase roman numeral
\expandafter\xdef\csname#1\endcsname{%
\uppercase\expandafter{\romannumeral\T}}%
\fi}%
%
% CENTERLINE Rev. 9/6/88 drg
%
% Centerline with single and multiple line capabilities
\newif\if*afn*cl
\def\centerline#1{\par % Begin centerline markup
\*afn*clfalse
\B={}
\N=0
\bgroup
\parindent=\z@ \relax % zero indent
\parfillskip=0pt plus1fil \relax % infinite stretch
\everypar{\null\hskip0pt plus1fil\relax} % add infinite glue
\def\linebreak{\hskip0pt plus1fil\relax\break
\null\hskip0pt plus1fil\relax}%
\let\lbr=\linebreak
\let\toclinebreak=\space
\let\toclbr=\space
\justify
\let\*vfn=\vfootnote
\let\*afn=\autofootnote
\def\vfootnote##1##2{\edef\T{\the\B\noexpand\vfootnote{##1}{##2}}
\global\B=\expandafter{\T}}
\def\autofootnote{\global\*afn*cltrue
\global\advance\N by 1 % count the notes done
\*afn}
\let\afn=\autofootnote
\let\*fn=\footnote
\def\footnote##1{\global\*afn*cltrue \*fn{##1}}
\setbox\A=\vbox{#1\par % added to make skip with multiple lines
\global\C=\baselineskip
\setbox0=\hbox{(}
\global\advance\C by-\ht0}% end vbox
\global\advance\fn*num by -\N %subtract the number of notes done
\let\autofootnote=\*afn \let\afn=\autofootnote
\let\footnote=\*fn
\let\vfootnote=\*vfn
\ifdim\ht\A>\baselineskip \else \C=\z@ \fi
\line{\hss\vbox{\vskip\C#1\par}\hss}% print centered lines
\egroup
\if*afn*cl % then there were footnotes in the \cl
\the\B
\fi
}% End centerline markup
\let\cl=\centerline
%
% CENTER MULTIPLE LINES
%
\newif\if*ctrl % centerline indicator
\*ctrlfalse
\def\centerlinesbegin{\par\global\*ctrltrue
\begingroup\pin{0pt}\psk{0pt}\leftskip=0pt plus1fil
\parfillskip=0pt \rightskip=0pt plus1fil\obeylines\ignorespaces}%
\let\clb=\centerlinesbegin
\def\centerlinesend{\endgroup\par}
\let\cle=\centerlinesend
%
% rightline par added to PLAIN TEX macro
%
\long\def\rightline#1{\par\line{\hss#1}}
\let\rl=\rightline
%
% right align multiple lines
%
\def\rightlinesbegin{\par\begingroup\parskip=0pt\parfillskip=0pt
\leftskip=0pt plus1fil\obeylines}%
\let\rlb=\rightlinesbegin
\def\rightlinesend{\endgroup\par}%
\let\rle=\rightlinesend
%
% As is or format off
%
\newskip\*aisb \*aisb = 6pt % Default skip before
\newskip\*aisa \*aisa = 6pt % Default skip after
\newtoks\*aif \*aif={\leftindent{0in}}
\newif\if*aib \*aibfalse % centerline indicator
%
\def\asisformat#1{{%
\def\everyasis##1{\global\*aif{##1}}%
\def\skipbefore##1{\global\*aisb=##1\relax}%
\def\skipafter##1{\global\*aisa=##1\relax}%
\relax
#1}} % end of asisformat
\let\aif=\asisformat
%
% As is or format off
\def\asisbegin{\par\*aibtrue\vskip\*aisb\relax\nointerlineskip
\begingroup
\let\*afn=\autofootnote % save definition of autofootnote
\def\leftindent##1{%
\*zerofalse \*okfalse
\e*p##1\end%
\if*zero \leftskip 0pt \fi
\advance \leftskip by ##1}%
\let\lin=\leftindent
%
\def\autofootnote{\endgroup % end asis format
\futurelet\next\ck*chr}% pick next character, then check the pick
\let\afn=\autofootnote % reset abbreviation for autofootnote
\def\ck*chr{\ifcat\bgroup % if left brace
\noexpand\next % do nothing
\let\next\gather % next equals gather
\else % no brace present
\let\next\re*group\fi % stop if no brace encountered
\next}%
\def\gather{\*afn % call normal autofootnote
\bgroup % furnish left brace, read group
\aftergroup\re*group % reset asis format
\let\next}% eat curly brace in text
% group ends at text right curly brace
\def\re*group{\*asisb}% restore asis group
%
\def\*asisb{\begingroup
\def\singlespace{\baselineskip=\*isk}%
\let\ssp=\singlespace
\def\doublespace{\baselineskip=2\*isk}%
\let\dsp=\doublespace
\def\par{\leavevmode\endgraf}%
\parskip0pt\parindent0pt
\the\*aif
\setupverbatim}\*asisb}
{\obeyspaces\gdef {\ }}
\def\setupverbatim{\obeylines
\obeyspaces }
\let\aib=\asisbegin
\def\asisend{\endgroup\endgroup\vskip\*aisa\relax\*aibfalse}
\let\aie=\asisend
%
% Draw boxes
%
\newdimen\db*m \db*m=3pt
\newdimen\db*s \db*s=.4pt
%
\long\def\drawbox#1{\vbox{\hrule height\db*s
\hbox{\vrule width\db*s\hskip\db*m
\vbox{\vskip\db*m
\hbox{#1}
\vskip\db*m}\hskip\db*m\vrule width\db*s}
\hrule height\db*s}}
\let\db=\drawbox
%
\def\drawboxformat#1{{%
\def\boxmat##1{\global\db*m=##1\relax}%
\def\boxrule##1{\global\db*s=##1\relax}%
#1}} % end of drawboxformat
\let\dbf=\drawboxformat
%
\def\drawboxrulesize#1{\dbf{\boxrule{#1}}
\message{<TEXT1> Warning: Use drawboxformat instead of drawboxrulesize}}
\let\dbrs=\drawboxrulesize
\def\drawboxmat#1{\dbf{\boxmat{#1}}
\message{<TEXT1> Warning: Use drawboxformat instead of drawboxmat}}
\let\dbm=\drawboxmat
%
% Paragraph boxes
%
\newdimen\pb*m \pb*m=3pt
\newdimen\pb*s \pb*s=.4pt
%
\long\def\paragraphbox#1{\par\hbox{\vbox{\hrule height\pb*s
\hbox{\vrule width\pb*s\hskip\pb*m
\vbox{\vskip\pb*m
\hbox{\vbox{\advance \hsize by -2\pb*m
\advance \hsize by -2\pb*s
\hrule width \hsize height 0pt depth 0pt
#1}}
\vskip\pb*m}\hskip\db*m\vrule width\pb*s}
\hrule height\pb*s}}}
\let\pb=\paragraphbox
%
\def\paragraphboxformat#1{{%
\def\boxmat##1{\global\pb*m=##1\relax}%
\def\boxrule##1{\global\pb*s=##1\relax}%
#1}} % end of paragraphboxformat
\let\pbf=\paragraphboxformat
%
% page skip
%
\def\newpage{\vfil\break}% changed from vfill to vfil 11/4/86 bth
\let\np=\newpage
%
% emptypage
%
\def\emptypage{\global\advance\*pcount by1}% produces empty pages
%
\def\*blkpg{ % BLANK PAGE MACRO, produces the empty page
\loop % checks the number of empty pages
\*badj % check for binding adjust
\shipout\vbox{\makeheadline % shipout page with headline and
\vbox to\*txth{\vfil} % fooline only
\makefootline}
\global\advance\*pcount by\m@ne % decrement empty page counter
\advancepageno % advance the page number
\ifnum\*pcount>0 % check for multiple empty pages
\repeat}% END, empty page macro
\let\ep=\emptypage
%
% List Level Macros
%
\newcount\ll*n % Current list level number
\newcount\*toklimit
\newcount\*countlimit
\newcount\ll*stb % list style start
\newcount\ll*cs % list*enum*value*start
\newcount\ll*cmps % list compare start
\newcount\ll*cmpe
\newcount\ll*lc % Last level called
\*toklimit = 188 % Positions 224-253 are used for the 30 table column justification
% Positions 199-223 are used for the 25 different list level styles
% Tokens below 199 are available for \newtoks use.
% Token 190 is the build token
% 191-197 is the list level formats, level 1-7
% 198 is the bullet format
%
\*countlimit = 236 % Counters 244-250 are the styles for the 7 list levels
% Counters 237-243 are the enum counters for the 7 list levels
% Counters below 237 are available for \newcount use.
%
\ll*stb = 244 % Counters 244-250 correspond to the 7 list level styles,
% value is index into tokens 199-223
\ll*cs = 237 % Counters 237-243 correspond to the 7 list level enum values.
\ll*cmps = 199 % Where to start in the \toks values for the 25 different list level styles
\ll*cmpe = 223 % Where to stop in the \toks values for the 25 different list level styles
%
\count244 = 1 % style "1."
\count245 = 4 % style "a."
\count246 = 7 % style "i."
\count247 = 2 % style "1)"
\count248 = 5 % style "a)"
\count249 = 8 % style "i)"
\count250 = 3 % style "(1)"
%
\newskip\ll*sb \ll*sb = 0pt % Default is no \vskip
\newskip\ll*sa \ll*sa = 0pt % Default is no \vskip
%
\toks191={\rm\leftindent{.5in}\gutter{1em}} % level 1 indent is 5 characters initially
\toks192={\rm\leftindent{.8in}\gutter{1em}} % level 2 indent
\toks193={\rm\leftindent{1.1in}\gutter{1em}} % level 3 indent
\toks194={\rm\leftindent{1.4in}\gutter{1em}} % level 4 indent
\toks195={\rm\leftindent{1.7in}\gutter{1em}} % level 5 indent
\toks196={\rm\leftindent{2in}\gutter{1em}} % level 6 indent
\toks197={\rm\leftindent{2.3in}\gutter{1em}} % level 7 indent
\toks198={\rm\leftindent{+.5in}\gutter{1em}} % bullets
%
% The 25 different List level styles:
\toks199 = {1.} % Style 1
\toks200 = {1)} % 2
\toks201 = {(1)} % 3
\toks202 = {a.} % 4
\toks203 = {a)} % 5
\toks204 = {(a)} % 6
\toks205 = {i.} % 7
\toks206 = {i)} % 8
\toks207 = {(i)} % 9
\toks208 = {I.} % 10
\toks209 = {I)} % 11
\toks210 = {(I)} % 12
\toks211 = {A.} % 13
\toks212 = {A)} % 14
\toks213 = {(A)} % 15
\toks214 = {1]} % 16
\toks215 = {[1]} % 17
\toks216 = {a]} % 18
\toks217 = {[a]} % 19
\toks218 = {i]} % 20
\toks219 = {[i]} % 21
\toks220 = {I]} % 22
\toks221 = {[I]} % 23
\toks222 = {A]} % 24
\toks223 = {[A]} % 25
%
\newif\if*check % True unless done parsing \listformat
\newif\ifll*lp
\newif\ifll*rp
\newif\if*lsqb
\newif\if*rsqb
\newif\ifll*per
\newif\ifll*dig
\newif\ifl*alpha
\newif\if*u*alpha
\newif\if*l*roman
\newif\if*u*roman
\newif\ifll*nil
%
\ll*niltrue
%
\outer\def\newtoks{\alloc@5\toks\toksdef\*toklimit}
\outer\def\newcount{\alloc@0\count\countdef\*countlimit}
%
%
% Macros for producing enumerated list levels.
%
%
\def\listformat#1{{\begingroup%
\def\liststyle##1{\par\N = 1
\toks190 = {}
\Z##1\end}%
\def\Z##1{\ifx ##1\end \Y
\let \next = \relax
\else \ifnum \N > 7
\message{<TEXT1> Error! Too many list levels specified, 7 is max.
Statement ignored.}
\let \next = \Z
\else \ifx ##1, \Y
\advance \N by 1
\toks190 = {}
\let \next = \Z
\else \toks190 = \expandafter{\the\toks190 ##1}
\let \next = \Z
\fi\fi\fi\next}%
\def\Y{\*tempiffalse
\*checktrue
\E = \ll*cmps
\loop \ifnum \E > \ll*cmpe
\*checkfalse
\*tempiftrue
\else \edef\T{\the\toks190}%
\edef\U{\the\toks\E}%
\ifx\T\U
\*checkfalse
\F = \ll*stb
\advance \F by -1
\advance \F by \N
\count\F = \E
\advance \count\F by -\ll*cmps
\global\advance \count\F by 1
\fi\fi
\if*check% Then
\advance \E by 1
\repeat
\if*tempif \message{<TEXT1> Error! \the\toks190 is an invalid list
level style. It will be ignored}
\fi}%
\def\skipbefore##1{\global\ll*sb = ##1\relax}%
\def\skipafter##1{\global\ll*sa = ##1\relax}%
\def\everylistlevel##1##2{\ifcase ##1
\or \global\toks191 = {##2}
\or \global\toks192 = {##2}
\or \global\toks193 = {##2}
\or \global\toks194 = {##2}
\or \global\toks195 = {##2}
\or \global\toks196 = {##2}
\or \global\toks197 = {##2}
\fi}%
\def\everybullet##1{\global\toks198 = {##1}}%
\relax
#1
\endgroup}}
%
\let \lif = \listformat
%
\def\listbegin{\vskip\ll*sb\relax
\ll*nilfalse
\begingroup
\global\ll*lc = 0
\ll*ini1
}
\let\lib=\listbegin
%
\def\listend{\vskip\ll*sa\relax
\endgroup
\ll*niltrue
}
\let\lie=\listend
%
\def\listlevel#1{\par
\ifll*nil \message{<TEXT1> Warning, listbegin was not
specified. The left margin indent will be set to zero.}
\else \if*dbl \else \if*tpl
% If in multiple columns, don't end the group. Do so otherwise
\else \endgroup
\begingroup
\fi\fi
\fi
\*tempiftrue % Usually not quite so pessimistic
\ifcat 1#1 \ifnum #1 < 8 \*tempiffalse % OK if \listlevel1-\listlevel7
\fi\fi
\if*tempif \message{<TEXT1> Warning, invalid list level "#1",
listlevel1 will be used instead.}
\listlevel1
\else \E = #1
\global\ll*n = \E
\advance \E by 1
\ll*ini\E
\par
\ll*fmt
\noindent
\txt*in{\ll*p{#1}}
\fi
}
\let \lil = \listlevel
%
\def\txt*in#1{\hbox to 0pt{\hss{#1}\hskip\*gut}\ignorespaces}
%
\def\ll*fmt{\*gut=1em
\ifcase \the\ll*n
\or \the\toks191
\or \the\toks192
\or \the\toks193
\or \the\toks194
\or \the\toks195
\or \the\toks196
\or \the\toks197
\fi}
%
\def\listresume{% rev. 7/6/87
\if*start*bul\global\advance\ll*n by 1\global\*start*bulfalse\fi
% account for bulleted list ffems
\ifnum \ll*n < 2 \lin{0pt}
\global\ll*n = 1
\else \global\advance \ll*n by -1
\ll*fmt
\fi
\noindent\ignorespaces}
%
\let\lir=\listresume
% Evaluate Style
\def\e*s{%
\global\ll*lpfalse
\global\ll*rpfalse
\global\*lsqbfalse
\global\*rsqbfalse
\global\ll*perfalse
\global\ll*digfalse
\global\l*alphafalse
\global\*u*alphafalse
\global\*l*romanfalse
\global\*u*romanfalse
\ifcase \count\F
\or \global\ll*digtrue \global\ll*pertrue % Style 1
\or \global\ll*digtrue \global\ll*rptrue % 2
\or \global\ll*digtrue \global\ll*rptrue \global\ll*lptrue % 3
\or \global\l*alphatrue \global\ll*pertrue % 4
\or \global\l*alphatrue \global\ll*rptrue % 5
\or \global\l*alphatrue \global\ll*rptrue \global\ll*lptrue % 6
\or \global\*l*romantrue \global\ll*pertrue % 7
\or \global\*l*romantrue \global\ll*rptrue % 8
\or \global\*l*romantrue \global\ll*rptrue \global\ll*lptrue % 9
\or \global\*u*romantrue \global\ll*pertrue % 10
\or \global\*u*romantrue \global\ll*rptrue % 11
\or \global\*u*romantrue \global\ll*rptrue \global\ll*lptrue % 12
\or \global\*u*alphatrue \global\ll*pertrue % 13
\or \global\*u*alphatrue \global\ll*rptrue % 14
\or \global\*u*alphatrue \global\ll*rptrue \global\ll*lptrue % 15
\or \global\ll*digtrue \global\*rsqbtrue % 16
\or \global\ll*digtrue \global\*rsqbtrue \global\*lsqbtrue % 17
\or \global\l*alphatrue \global\*rsqbtrue % 18
\or \global\l*alphatrue \global\*rsqbtrue \global\*lsqbtrue % 19
\or \global\*l*romantrue \global\*rsqbtrue % 20
\or \global\*l*romantrue \global\*rsqbtrue \global\*lsqbtrue % 21
\or \global\*u*romantrue \global\*rsqbtrue % 22
\or \global\*u*romantrue \global\*rsqbtrue \global\*lsqbtrue % 23
\or \global\*u*alphatrue \global\*rsqbtrue % 24
\or \global\*u*alphatrue \global\*rsqbtrue \global\*lsqbtrue % 25
\fi}
%
\def\ll*ini#1{\*start*bulfalse
\ifnum #1 < 7 \N = #1
\advance \N by -1
\loop \ifnum \N < 7 % Loop max of 7 times
\E = \N
\advance \E by \ll*cs
\global\count\E = 0
\advance \N by 1
\repeat
\fi} % else don't initialize when \lil7
%
\def\ll*p#1{%
\E = #1
\advance \E by \ll*cs
\advance \E by -1 % \E is the listlevel value counter
\F = \E
\advance \F by 7
\global\advance \count\E by 1 % Increment the list level counter
%
% If this level is same as previous level, no need to re-evaluate
% the style to be used.
%
\ifnum \ll*lc = #1
\else \e*s
\global\ll*lc = #1
\fi
%
% Print the prefix punctuation
%
\ifll*lp (\unskip % Styles 3, 6, 9, 12, 15
\else \if*lsqb [\unskip % Styles 17, 19, 21, 23, 25
\fi\fi
%
% Print the listlevel value, i.e. "1", "a", "A", "I", or "i".
%
\ifll*dig % Then its a style using digits
\number\count\E % Print the number
\unskip % To get rid of any following extra spaces
\else \ifl*alpha % Then its a style with lower case letters
\a*c{\count\E} % Print the lower case letters
\unskip % To get rid of any following extra spaces
\else \if*u*alpha % Then its a style with upper case letters
\a*c{\count\E} % Print uppercase alpha
\unskip % To get rid of any following extra spaces
\else \if*l*roman % Then its a style with lower case roman numerals
\romannumeral\count\E % Print the lower case roman numeral
\unskip % To get rid of any following extra spaces
\else \if*u*roman % Print upper case roman numeral
\uppercase\expandafter{\romannumeral\count\E}
\unskip % To get rid of any following extra spaces
\else \message{<TEXT1> Error! Something is awry in the listlevel style. Call a consultant.}
\fi\fi\fi\fi\fi
%
% Print the suffix punctuation
%
\ifll*per .\unskip % Styles 1, 4, 7, 10, 13
\else \ifll*rp )\unskip % Styles 2, 3, 5, 6, 8, 9, 11, 12, 14, 15
\else \if*rsqb ]\unskip % Styles 16, 17, 18, 19, 20, 21, 22, 23, 24, 25
\fi\fi\fi
}
%
% This macro will convert an integer into a letter. In Appendix F of the
% TeXbook you will see that octal character '141 is the small letter "a".
% Octal 141=Decimal 97, Therefore, add 96 to value of listlevel counter.
% For example, 1="a", 2="b", etc. The macro will also change 27="aa", 28="ab", etc.
%
\def\a*c#1{%
\ifnum #1 < 27 \G = #1% % Then its a single letter a-z
\advance \G by 96% % See the font table in App. F
\ifl*alpha% % Then its a lower case style
\char\G% % Print the character a-z
\else \advance \G by -32%
\char\G% % Print the character A-Z
\fi%
\else \G = #1% % else its "AA" or greater
\divide \G by 26% % This holds the first character
\Q = #1% % Get ready to compute second letter
\R = #1%
\divide \R by 26%
\multiply \R by 26%
\ifnum #1 = \R%
\advance \G by -1%
\Q = 26%
\else \advance \Q by -\R%
\fi%
\a*c{\G}% % Get the first character a-z
\unskip%
\a*c{\Q}% % Get the second letter
\fi} % End of \a*c
%
%
% Bullets
%
\newif\if*start*bul
\newdimen\*bul*dim
\mathchardef\*bullet="220F
\def\bullet{% bullet defined for both math and text modes, rev. 6/25/87
\ifmmode \*bullet % math mode bullet
\else % text or list bullet
\ifll*nil % no list in progress, text bullet
\leftskip = 0pt
{\if*msp{*}\else\sy\char"0F\fi}
\else % list in progress, list bullet
\the\toks198
\if*start*bul \lin{\*bul*dim}
\else \*bul*dim = \leftskip
\*start*bultrue \fi % end starting bullet
\par\noindent
\txt*in{{\if*msp{*}\else\sy\char"0F\fi}}
\fi % end list in progress check
\fi % end math mode bullet check
}% end bullet
\let \bul=\bullet
%
% Macros for doing Table of Contents, Heads, Subheads, Tables, and Figures
%
\newtoks\*TCt \*TCt={\cl{\twelvept\bd Table of Contents}\vs{1\bl}}
\newtoks\*ptf \*ptf={\vs{1\bl}\cl{Part \partnumber}\cl{\parttitle}%
\vs{1\bl}\nin Part \partnumber \leader \pagenumber}
\newtoks\*ctf \*ctf={\hangingchapternumber \chaptertitle \leader \pagenumber}
\newtoks\*atf \*atf={\hangingappendixnumber \appendixtitle \leader \pagenumber}
\newtoks\*prtf \*prtf={\nin \prefacetitle \leader \pagenumber}
\newtoks\*satf \*satf={\leftindent{.5in}\nin \subheadatitle \leader \pagenumber}
\newtoks\*sbtf \*sbtf={\leftindent{1in}\nin \subheadbtitle \leader \pagenumber}
\newtoks\*sctf \*sctf={\leftindent{1.5in}\nin \subheadctitle \leader \pagenumber}
\newtoks\*sdtf \*sdtf={\leftindent{2in}\nin \subheaddtitle \leader \pagenumber}
\newtoks\*btf \*btf={\nin\bibtitle \leader \pagenumber}
\newtoks\*ftf \*ftf={\hangingnumber{\figurenumber.} \figuretitle \leader \pagenumber}
\newtoks\*ftt \*ftt={\newpage\cl{\twelvept\bd List of Figures}\line{Figure\hfill Page}}
\newtoks\*ttf \*ttf={\hangingnumber{\tablenumber.} \tabletitle\leader \pagenumber}
\newtoks\*ttt \*ttt={\newpage\cl{\twelvept\bd List of Tables}\line{Table\hfill Page}}
\newtoks\*figt \*figt={\bqb\tenpt\bd\hp Figure \figurenumber. \rm\figuretitle \bqe}
\newtoks\*tabt \*tabt={\vs{\bl}\cl{\twelvept\bd Table \tablenumber}%
\cl{\twelvept\tabletitle}\vs{\bl}}
\newtoks\*partt \*partt={\dumpinsertseject\titlepage
\hrule height 0pt depth 0pt\vfil
\cl{\twelvept\bd Part \partnumber}
\cl{\twelvept\bd\parttitle}
\vs{.5\tp*sk}
\np
\scn{0}\ssan{0}\ssbn{0}\sscn{0}\ssdn{0}
\sfn{0}\stn{0}\sfnn{0}\senn{0}
}%
\newtoks\*chapt \*chapt={\dumpinsertseject
\cl{\twelvept\bd Chapter \chapternumber}%
\cl{\twelvept\bd\chaptertitle}
\vs{1\bl}
\ssan{0}\ssbn{0}\sscn{0}\ssdn{0}
}
\newtoks\*appt \*appt={\dumpinsertseject %
\cl{\twelvept\bd Appendix \appendixnumber}
\cl{\twelvept\bd\appendixtitle}
\vs{1\bl}
\scn{0}\ssan{0}\ssbn{0}\sscn{0}
\ssdn{0}\sfn{0}\stn{0}
}
\newtoks\*pret \*pret={\dumpinsertseject %
\cl{\twelvept\bd\prefacetitle}
\vs{1\bl}
\ssan{0}\ssbn{0}\sscn{0}\ssdn{0}
}%
\newtoks\*subat \*subat={\removelastskip\goodbreak
\vs{2\bl}
\nin\twelvept\bd\subheadatitle\par\nobreak
\vs{1\bl}\nobreak
\ssbn{0}\sscn{0}\ssdn{0}
}
\newtoks\*subbt \*subbt={\removelastskip\goodbreak
\vs{2\bl}
\nin\twelvept\it\subheadbtitle\par\nobreak
\vs{1\bl}\nobreak
\sscn{0}\ssdn{0}
}
\newtoks\*subct \*subct={\removelastskip\goodbreak
\vs{2\bl}
\nin\twelvept\subheadctitle\par\nobreak
\vs{1\bl}\nobreak
\ssdn{0}
}
\newtoks\*subdt \*subdt={\goodbreak\twelvept\it\subheaddtitle.}
%
\newif\if*cont*chap \*cont*chapfalse
\newif\if*TC*fig \*TC*figtrue
\newif\if*TC*tab \*TC*tabtrue
\newif\if*TC*prt \*TC*prttrue
\newif\if*TC*chp \*TC*chptrue
\newif\if*TC*app \*TC*apptrue
\newif\if*TC*pre \*TC*pretrue
\newif\if*TC*sha \*TC*shatrue
\newif\if*TC*shb \*TC*shbtrue
\newif\if*TC*shc \*TC*shcfalse
\newif\if*TC*shd \*TC*shdfalse
\newif\if*TCaopen \*TCaopenfalse
\newif\if*TCbopen \*TCbopenfalse
\newif\if*TCcopen \*TCcopenfalse
%
\newdimen\*ch*hi \*ch*hi=.25in
\newdimen\*ap*hi \*ap*hi=.25in
\newdimen\fi*hi \fi*hi=.25in
\newdimen\ta*hi \ta*hi=.25in
%
\newcount\fi*n \fi*n=0
\newcount\ta*n \ta*n=0
\newcount\*pt*num \*pt*num=0
\newcount\*pt*st \*pt*st=1
\newcount\*ch*num \*ch*num=0
\newcount\*ch*st \*ch*st=1
\newcount\*ap*num \*ap*num=0
\newcount\*ap*st \*ap*st=2
\newcount\*sa*num \*sa*num=0
\newcount\sa*st \sa*st=1
\newcount\*sb*num \*sb*num=0
\newcount\sb*st \sb*st=1
\newcount\*sc*num \*sc*num=0
\newcount\sc*st \sc*st=1
\newcount\*sd*num \*sd*num=0
\newcount\sd*st \sd*st=1
%
\newwrite\TC*fa
\newwrite\TC*fb
\newwrite\TC*fc
%
\long\def\putincontents#1#2{\ifcase #1 % Putincontents markup
\or \if*TCaopen % Do nothing if open, else open it
\else \immediate\openout\TC*fa=text1$$.tc1
\immediate\write\TC*fa{\the\*TCt}
\global\*TCaopentrue
\fi
{\def\pagenumber{\noexpand\pagenumber}%
\def\pn{\noexpand\pagenumber}%
\def\eightteenpt{\noexpand\noexpand\noexpand\eightteenpt}%
\def\fourteenpt{\noexpand\noexpand\noexpand\fourteenpt}%
\def\twelvept{\noexpand\noexpand\noexpand\twelvept}%
\def\tenpt{\noexpand\noexpand\noexpand\tenpt}%
\def\leavevmode{\noexpand\noexpand\noexpand\leavevmode}%
\def\bullet{\noexpand\noexpand\noexpand\bullet}%
\def\bul{\noexpand\noexpand\noexpand\bullet}%
\def\AA{\noexpand\noexpand\noexpand\AA}%
\def\aa{\noexpand\noexpand\noexpand\aa}%
\def\dag{\noexpand\noexpand\noexpand\dag}%
\def\ddag{\noexpand\noexpand\noexpand\ddag}%
\def\neg{\noexpand\noexpand\noexpand\neg}%
\def\tilde{\noexpand\noexpand\noexpand\tilde}%
\def\\{\noexpand\noexpand\noexpand\\}%
\def\{{\noexpand\noexpand\noexpand\{}%
\def\}{\noexpand\noexpand\noexpand\}}%
\def\_{\noexpand\noexpand\noexpand\_}%
\def\leftindent##1{\leftskip=##1}%
\def\lin##1{\leftskip=##1}%
\def\toclinebreak{\noexpand\noexpand\noexpand\toclinebreak}%
\def\toclbr{\noexpand\noexpand\noexpand\toclinebreak}%
\let\lin=\leftindent
\let\linebreak=\space
\let\lbr=\space
\def\underscore##1{\noexpand\noexpand\noexpand
\underscore{##1}}%
\let\us=\underscore
\def\centerline##1{\noexpand\noexpand\noexpand
\centerline{##1}}%
\let\cl=\centerline
\def\autoendnote##1{}%
\let\aen=\autoendnote
\def\autofootnote##1{}%
\let\afn=\autofootnote
\def\par{\endgraf}%
\def\paragraph{\endgraf}%
\def\justify{\noexpand\noexpand\noexpand\justify}%
\let\ju=\justify
\def\partnumber{\noexpand\noexpand\noexpand\sptn{\the\*pt*num}
\noexpand\noexpand\noexpand\partnumber}%
\def\chapternumber{\noexpand\noexpand\noexpand\scn{\the\*ch*num}
\noexpand\noexpand\noexpand\chapternumber}%
\def\appendixnumber{\noexpand\noexpand\noexpand\san{\the\*ap*num}
\noexpand\noexpand\noexpand\appendixnumber}%
\def\subheadanumber{\noexpand\noexpand\noexpand\ssan{\the\*sa*num}
\noexpand\noexpand\noexpand\subheadanumber}%
\def\subheadbnumber{\noexpand\noexpand\noexpand\ssbn{\the\*sb*num}
\noexpand\noexpand\noexpand\subheadbnumber}%
\def\subheadcnumber{\noexpand\noexpand\noexpand\sscn{\the\*sc*num}
\noexpand\noexpand\noexpand\subheadcnumber}%
\def\subheaddnumber{\noexpand\noexpand\noexpand\ssdn{\the\*sd*num}
\noexpand\noexpand\noexpand\subheaddnumber}%
\def\hangingchapternumber{\noexpand\noexpand\noexpand\hangingchapternumber{\the\*ch*num}}%
\def\hangingappendixnumber{\noexpand\noexpand\noexpand\hangingappendixnumber{\the\*ap*num}}%
\def\hangingnumber##1{\noexpand\noexpand\noexpand\HFN{##1}}%
\def\hangingparagraph{\noexpand\noexpand\noexpand\hangingparagraph}%
\let\hp=\hangingparagraph
\def\hangingindent##1{\noexpand\noexpand\noexpand\hangingindent{##1}}%
\let\hin=\hangingparagraph
\edef\T{\leftskip=0pt #2}%
\edef\next{\write\TC*fa{\T\par}}%
\next}%
\or \if*TCbopen % Do nothing if open, else open it
\else \immediate\openout\TC*fb=text1$$.tc2
\immediate\write\TC*fb{\the\*ftt}
\global\*TCbopentrue\fi
{\def\pagenumber{\noexpand\pagenumber}%
\def\pn{\noexpand\pagenumber}%
\def\partnumber{\noexpand\noexpand\noexpand\sptn{\the\*pt*num}
\noexpand\noexpand\noexpand\partnumber}%
\def\chapternumber{\noexpand\noexpand\noexpand\scn{\the\*ch*num}
\noexpand\noexpand\noexpand\chapternumber}%
\def\appendixnumber{\noexpand\noexpand\noexpand\san{\the\*ap*num}
\noexpand\noexpand\noexpand\appendixnumber}%
\def\subheadanumber{\noexpand\noexpand\noexpand\ssan{\the\*sa*num}
\noexpand\noexpand\noexpand\subheadanumber}%
\def\subheadbnumber{\noexpand\noexpand\noexpand\ssbn{\the\*sb*num}
\noexpand\noexpand\noexpand\subheadbnumber}%
\def\subheadcnumber{\noexpand\noexpand\noexpand\sscn{\the\*sc*num}
\noexpand\noexpand\noexpand\subheadcnumber}%
\def\subheaddnumber{\noexpand\noexpand\noexpand\ssdn{\the\*sd*num}
\noexpand\noexpand\noexpand\subheaddnumber}%
\def\hangingchapternumber{\noexpand\noexpand\noexpand\hangingchapternumber{\the\*ch*num}}%
\def\hangingappendixnumber{\noexpand\noexpand\noexpand\hangingappendixnumber{\the\*ap*num}}%
\def\hangingnumber##1{\noexpand\noexpand\noexpand\HFN{##1}}%
\def\hangingparagraph{\noexpand\noexpand\noexpand\hangingparagraph}%
\let\hp=\hangingparagraph
\def\hangingindent##1{\noexpand\noexpand\noexpand\hangingindent{##1}}%
\let\hin=\hangingparagraph
\def\eightteenpt{\noexpand\noexpand\noexpand\eightteenpt}%
\def\fourteenpt{\noexpand\noexpand\noexpand\fourteenpt}%
\def\twelvept{\noexpand\noexpand\noexpand\twelvept}%
\def\tenpt{\noexpand\noexpand\noexpand\tenpt}%
\def\bullet{\noexpand\noexpand\noexpand\bullet}%
\def\bul{\noexpand\noexpand\noexpand\bullet}%
\def\leavevmode{\noexpand\noexpand\noexpand\leavevmode}%
\def\AA{\noexpand\noexpand\noexpand\AA}%
\def\aa{\noexpand\noexpand\noexpand\aa}%
\def\dag{\noexpand\noexpand\noexpand\dag}%
\def\ddag{\noexpand\noexpand\noexpand\ddag}%
\def\\{\noexpand\noexpand\noexpand\\}%
\def\neg{\noexpand\noexpand\noexpand\neg}%
\def\tilde{\noexpand\noexpand\noexpand\tilde}%
\def\{{\noexpand\noexpand\noexpand\{}%
\def\}{\noexpand\noexpand\noexpand\}}%
\def\_{\noexpand\noexpand\noexpand\_}%
\def\toclinebreak{\noexpand\noexpand\noexpand\toclinebreak}%
\def\toclbr{\noexpand\noexpand\noexpand\toclinebreak}%
\let\linebreak=\space
\let\lbr=\space
\def\underscore##1{\noexpand\noexpand\noexpand
\underscore{##1}}%
\let\us=\underscore
\def\centerline##1{\noexpand\noexpand\noexpand
\centerline{##1}}%
\let\cl=\centerline
\def\autoendnote##1{}%
\let\aen=\autoendnote
\def\autofootnote##1{}%
\let\afn=\autofootnote
\edef\T{#2}%
\edef\next{\write\TC*fb{\T\par}}%
\next}%
\or \if*TCcopen % Do nothing if open, else open it
\else \immediate\openout\TC*fc=text1$$.tc3
\immediate\write\TC*fc{\the\*ttt}
\global\*TCcopentrue\fi
{\def\pagenumber{\noexpand\pagenumber}%
\def\pn{\noexpand\pagenumber}%
\def\partnumber{\noexpand\noexpand\noexpand\sptn{\the\*pt*num}
\noexpand\noexpand\noexpand\partnumber}%
\def\chapternumber{\noexpand\noexpand\noexpand\scn{\the\*ch*num}
\noexpand\noexpand\noexpand\chapternumber}%
\def\appendixnumber{\noexpand\noexpand\noexpand\san{\the\*ap*num}
\noexpand\noexpand\noexpand\appendixnumber}%
\def\subheadanumber{\noexpand\noexpand\noexpand\ssan{\the\*sa*num}
\noexpand\noexpand\noexpand\subheadanumber}%
\def\subheadbnumber{\noexpand\noexpand\noexpand\ssbn{\the\*sb*num}
\noexpand\noexpand\noexpand\subheadbnumber}%
\def\subheadcnumber{\noexpand\noexpand\noexpand\sscn{\the\*sc*num}
\noexpand\noexpand\noexpand\subheadcnumber}%
\def\subheaddnumber{\noexpand\noexpand\noexpand\ssdn{\the\*sd*num}
\noexpand\noexpand\noexpand\subheaddnumber}%
\def\hangingchapternumber{\noexpand\noexpand\noexpand\hangingchapternumber{\the\*ch*num}}%
\def\hangingappendixnumber{\noexpand\noexpand\noexpand\hangingappendixnumber{\the\*ap*num}}%
\def\hangingnumber##1{\noexpand\noexpand\noexpand\HTN{##1}}%
\def\hangingparagraph{\noexpand\noexpand\noexpand\hangingparagraph}%
\let\hp=\hangingparagraph
\def\hangingindent##1{\noexpand\noexpand\noexpand\hangingindent{##1}}%
\let\hin=\hangingparagraph
\def\eightteenpt{\noexpand\noexpand\noexpand\eightteenpt}%
\def\fourteenpt{\noexpand\noexpand\noexpand\fourteenpt}%
\def\twelvept{\noexpand\noexpand\noexpand\twelvept}%
\def\tenpt{\noexpand\noexpand\noexpand\tenpt}%
\def\bullet{\noexpand\noexpand\noexpand\bullet}%
\def\bul{\noexpand\noexpand\noexpand\bullet}%
\def\leavevmode{\noexpand\noexpand\noexpand\leavevmode}%
\def\AA{\noexpand\noexpand\noexpand\AA}%
\def\aa{\noexpand\noexpand\noexpand\aa}%
\def\dag{\noexpand\noexpand\noexpand\dag}%
\def\ddag{\noexpand\noexpand\noexpand\ddag}%
\def\\{\noexpand\noexpand\noexpand\\}%
\def\neg{\noexpand\noexpand\noexpand\neg}%
\def\tilde{\noexpand\noexpand\noexpand\tilde}%
\def\{{\noexpand\noexpand\noexpand\{}%
\def\}{\noexpand\noexpand\noexpand\}}%
\def\_{\noexpand\noexpand\noexpand\_}%
\def\toclinebreak{\noexpand\noexpand\noexpand\toclinebreak}%
\def\toclbr{\noexpand\noexpand\noexpand\toclinebreak}%
\let\linebreak=\space
\let\lbr=\space
\def\underscore##1{\noexpand\noexpand\noexpand
\underscore{##1}}%
\let\us=\underscore
\def\centerline##1{\noexpand\noexpand\noexpand
\centerline{##1}}%
\let\cl=\centerline
\def\autoendnote##1{}%
\let\aen=\autoendnote
\def\autofootnote##1{}%
\let\afn=\autofootnote
\edef\T{#2}%
\edef\next{\write\TC*fc{\T\par}}%
\next}%
\else \message{<TEXT1> Warning, request for Contents entry other than
1, 2, or 3. Contents 1 will be assumed.}
\putincontents1{#2}
\fi}% End putincontents markup
\let\pic=\putincontents
%
\def\tableofcontentsformat#1{{%
\def\continuechapter##1{\global\*cont*chapfalse
\edef\T{##1}%
\edef\U{yes}%
\edef\V{no}%
\ifx \T\U \global\*cont*chaptrue
\else \ifx \T\V % Not continue chapter
\else \message{<TEXT1> Warning, argument to
continuechapter is not "yes" or "no".
"no" will be assumed}
\fi\fi}%
\def\toctitle##1{\global\*TCt={##1}}%
\def\parttocformat##1{\global\*ptf={##1}}%
\def\chaptertocformat##1{\global\*ctf={##1}}%
\def\hangingchapterindent##1{\global\*ch*hi=##1}%
\def\appendixtocformat##1{\global\*atf={##1}}%
\def\hangingappendixindent##1{\global\*ap*hi=##1}%
\def\prefacetocformat##1{\global\*prtf={##1}}%
\def\subheadatocformat##1{\global\*satf={##1}}%
\def\subheadbtocformat##1{\global\*sbtf={##1}}%
\def\subheadctocformat##1{\global\*sctf={##1}}%
\def\subheaddtocformat##1{\global\*sdtf={##1}}%
\def\bibliographytocformat##1{\global\*btf={##1}}%
\def\figuretoctitle##1{\global\*ftt={##1}}%
\def\figuretocformat##1{\global\*ftf={##1}}%
\def\hangingfigureindent##1{\global\fi*hi=##1}%
\def\tabletoctitle##1{\global\*ttt={##1}}%
\def\tabletocformat##1{\global\*ttf={##1}}%
\def\hangingtableindent##1{\global\ta*hi=##1}%
#1}}
\let\tocf=\tableofcontentsformat
%
\def\tableofcontents#1{%
\edef\T{}\edef\U{#1}\ifx\T\U\E=-3\else\E=#1\fi
\dumpinsertseject
\setpagenumber{\E}
\immediate\closeout\TC*fa
\begingroup
\def\centerline##1{\par % Begin centerline markup
\bgroup
\parindent=0pt \relax % zero indent
\parfillskip=0pt plus1fil \relax
\everypar{\null\hskip0pt plus1fil\relax} % add infinite glue
\def\linebreak{\hskip0pt plus1fil\relax\break
\null\hskip0pt plus1fil\relax}%
\let\toclinebreak=\linebreak % linebreak is a space in text1$$.
\let\toclbr=\linebreak % toc1, toclbr available in toc
\justify
\setbox\A=\vbox{##1\par % figure skip for multiple centerline
\global\C=\baselineskip
\setbox0=\hbox{(}
\global\advance\C by-\ht0}% end vbox
\line{\hss\vbox{\vskip\C##1\par}\hss} %
\egroup
}% End centerline markup
\let\cl=\centerline
\justify
\parfillskip=0pt
\rightskip=0pt plus 5em
\input text1$$.tc1
\endgraf
\leftskip=0pt
\if*TCbopen % True only if figures were used.
\immediate\closeout\TC*fb
\input text1$$.tc2
\fi
\if*TCcopen % True only if tables were used.
\immediate\closeout\TC*fc
\input text1$$.tc3
\fi
\endgroup}
\let\toc=\tableofcontents
%
\long\def\partformat#1{{%
\def\numberingstyle##1{\global\*pt*st=1
\edef\T{##1}%
\edef\U{1}%
\edef\V{A}%
\edef\W{I}%
\ifx \T\U % then style=1, the default
\else \ifx \T\V \global\*pt*st=2
\else \ifx \T\W \global\*pt*st=3
\else \message{<TEXT1> Warning, numbering style
in the partformat command is
invalid. Style 1 will be assumed.}
\fi\fi\fi}%
\long\def\titleformat##1{\global\*partt={##1}}%
\def\incontents##1{\global\*TC*prttrue
\edef\T{##1}%
\edef\U{yes}%
\edef\V{no}%
\ifx \T\U % Already true
\else \ifx \T\V \global\*TC*prtfalse
\else \message{<TEXT1> Warning, argument to
incontents in partformat is not "yes" or "no".
"yes" will be assumed.}
\fi\fi}%
#1}}
\let\paf=\partformat
%
\def\parttitle{}
\def\part#1{\par % Part revised 11/5/86
\global\def\parttitle{#1}%
\global\advance \*pt*num by 1
\bgroup
\let\toclinebreak=\space % prevent linebreak in title
\let\toclbr=\space % break in contents only
\the\*partt % This prints the title in the text
\egroup
\par
\if*TC*prt \putincontents1{\the\*ptf}\fi
\ignorespaces}% END
%
\def\partnumber{{\ifcase \*pt*st
\or \the\*pt*num
\or \l*alphafalse
\a*c{\*pt*num}
\or \uppercase\expandafter{\romannumeral\the\*pt*num}
\fi}}
%
\def\setpartnumber#1{\global\*pt*num=#1}%
% \spn is setpagenumber
\let\sptn=\setpartnumber
%
\long\def\chapterformat#1{{%
\def\numberingstyle##1{\global\*ch*st=1
\edef\T{##1}%
\edef\U{1}%
\edef\V{A}%
\edef\W{I}%
\ifx \T\U % then style=1, the default
\else \ifx \T\V \global\*ch*st=2
\else \ifx \T\W \global\*ch*st=3
\else \message{<TEXT1> Warning, numbering style
in the chapterformat command is
invalid. Style 1 will be assumed.}
\fi\fi\fi}%
\long\def\titleformat##1{\global\*chapt={##1}}%
\def\incontents##1{\global\*TC*chptrue%
\edef\T{##1}%
\edef\U{yes}%
\edef\V{no}%
\ifx \T\U % Already true
\else \ifx \T\V \global\*TC*chpfalse
\else \message{<TEXT1> Warning, argument to
incontents in chapterformat is not "yes" or "no".
"yes" will be assumed.}
\fi\fi}%
#1}}
\let\chf=\chapterformat
%
\def\chaptertitle{}
\def\chapter#1{\par % Chapter revision 11/3/86 (added toclinebreak)
\global\def\chaptertitle{#1}%
\global\advance \*ch*num by 1
\bgroup
\let\toclinebreak=\space
\let\toclbr=\space
\the\*chapt % prints the title in the text
\egroup
\if*TC*chp \putincontents1{\the\*ctf}\fi
\ignorespaces}% END chapter markup definition
%
\def\chapternumber{{\ifcase \*ch*st
\or \the\*ch*num
\or \l*alphafalse
\a*c{\*ch*num}
\or \uppercase\expandafter{\romannumeral\the\*ch*num}
\fi
\removelastskip}}
\let\chap=\chapter
%
\def\hangingchapternumber#1{\*ch*num=#1\laf{\labelwidth{\*ch*hi}}
\label{\hskip\*ch*hi\llap{\chapternumber.}}}
%
\def\setchapternumber#1{\global\*ch*num=#1}%
\let\scn=\setchapternumber
%
\long\def\appendixformat#1{{%
\def\numberingstyle##1{\global\*ap*st=2
\edef\T{##1}%
\edef\U{1}%
\edef\V{A}%
\edef\W{I}%
\ifx \T\U \global\*ap*st=1
\else \ifx \T\V \global\*ap*st=2
\else \ifx \T\W \global\*ap*st=3
\else \message{<TEXT1> Warning, numbering style
in the appendixformat command is
invalid. Style 2 will be assumed.}
\fi\fi\fi}%
\long\def\titleformat##1{\global\*appt={##1}}%
\def\incontents##1{\global\*TC*apptrue
\edef\T{##1}%
\edef\U{yes}%
\edef\V{no}%
\ifx \T\U % Already true
\else \ifx \T\V \global\*TC*appfalse
\else \message{<TEXT1> Warning, argument to
incontents in appendixformat is not "yes" or "no".
"yes" will be assumed.}
\fi\fi}%
#1}}
\let\apf=\appendixformat
%
\def\appendixtitle{}
\def\appendix#1{% Appendix revised 11/3/86 (added toclinebreak)
\global\def\appendixtitle{#1}%
\global\advance \*ap*num by 1
\par
\bgroup
\let\toclinebreak=\space
\let\toclbr=\space
\the\*appt % prints the appendix title
\egroup
\if*TC*app \putincontents1{\the\*atf}\fi
\ignorespaces}% END appendix markup definition
%
\def\appendixnumber{{\ifcase \*ap*st
\or \the\*ap*num
\or \l*alphafalse
\a*c{\*ap*num}
\or \uppercase\expandafter{\romannumeral\the\*ap*num}
\fi
\removelastskip}}
\let\app=\appendix
%
\def\hangingappendixnumber#1{\*ap*num=#1\laf{\labelwidth{\*ap*hi}}
\label{\hskip\*ap*hi\llap{\appendixnumber.}}}
%
\def\setappendixnumber#1{\global\*ap*num=#1}%
\let\san=\setappendixnumber
%
\long\def\prefaceformat#1{{%
\long\def\titleformat##1{\global\*pret={##1}}%
\def\incontents##1{\global\*TC*pretrue
\edef\T{##1}%
\edef\U{yes}%
\edef\V{no}%
\ifx \T\U % Already true
\else \ifx \T\V \global\*TC*prefalse
\else \message{<TEXT1> Warning, argument to
incontents in prefaceformat is not "yes" or "no".
"yes" will be assumed.}
\fi\fi}%
#1}}
\let\prf=\prefaceformat
%
\def\prefacetitle{}
\def\preface#1{% Preface revised 11/3/86 (added toclinebreak)
\global\def\prefacetitle{#1}%
\par
\bgroup
\let\toclinebreak=\space
\let\toclbr=\space
\the\*pret % prints the title in the text
\egroup
\if*TC*pre \putincontents1{\the\*prtf}\fi
\ignorespaces}% END preface markup definition
\let\pre=\preface
%
\long\def\subheadaformat#1{{%
\def\numberingstyle##1{\global\sa*st=1
\edef\T{##1}%
\edef\U{1}%
\edef\V{A}%
\edef\W{I}%
\ifx \T\U % then style=1, the default
\else \ifx \T\V \global\sa*st=2
\else \ifx \T\W \global\sa*st=3
\else \message{<TEXT1> Warning, numbering style
in the subheadaformat command is
invalid. Style 1 will be assumed.}
\fi\fi\fi}%
\long\def\titleformat##1{\global\*subat={##1}}%
\def\incontents##1{\global\*TC*shatrue
\edef\T{##1}%
\edef\U{yes}%
\edef\V{no}%
\ifx \T\U % Already true
\else \ifx \T\V \global\*TC*shafalse
\else \message{<TEXT1> Warning, argument to
incontents in subheadaformat is not "yes" or "no".
"yes" will be assumed.}
\fi\fi}%
#1}}
\let\shaf=\subheadaformat
%
\def\subheadatitle{}
\def\subheada#1{% Subheada revised 11/3/86 (added toclinebreak)
\global\def\subheadatitle{#1}%
\global\advance \*sa*num by 1
\par
\bgroup
\let\toclinebreak=\space
\let\toclbr=\space
\the\*subat % prints the title in the text
\egroup
\if*TC*sha \putincontents1{\the\*satf}\fi
\ignorespaces}% END subheada markup definition
%
\def\subheadanumber{{\ifcase \sa*st
\or \the\*sa*num
\or \l*alphafalse
\a*c{\*sa*num}
\or \uppercase\expandafter{\romannumeral\the\*sa*num}
\fi
\removelastskip}}
\let\sha=\subheada
%
\def\setsubheadanumber#1{\global\*sa*num=#1}%
\let\ssan=\setsubheadanumber
%
\long\def\subheadbformat#1{{%
\def\numberingstyle##1{\global\sb*st=1
\edef\T{##1}%
\edef\U{1}%
\edef\V{A}%
\edef\W{I}%
\ifx \T\U % then style=1, the default
\else \ifx \T\V \global\sb*st=2
\else \ifx \T\W \global\sb*st=3
\else \message{<TEXT1> Warning, numbering style
in the subheadbformat command is
invalid. Style 1 will be assumed.}
\fi\fi\fi}%
\long\def\titleformat##1{\global\*subbt={##1}}%
\def\incontents##1{\global\*TC*shbtrue
\edef\T{##1}%
\edef\U{yes}%
\edef\V{no}%
\ifx \T\U % Already true
\else \ifx \T\V \global\*TC*shbfalse
\else \message{<TEXT1> Warning, argument to
incontents in subheadbformat is not "yes" or "no".
"yes" will be assumed.}
\fi\fi}%
#1}}
\let\shbf=\subheadbformat
%
\def\subheadbtitle{}
\def\subheadb#1{% Subheadb revised 11/3/86 (added toclinebreak)
\global\def\subheadbtitle{#1}%
\global\advance \*sb*num by 1
\par
\bgroup
\let\toclinebreak=\space
\let\toclbr=\space
\the\*subbt % This prints the title in the text
\egroup
\if*TC*shb \putincontents1{\the\*sbtf}\fi
\ignorespaces}% END subheadb markup definition
%
\def\subheadbnumber{{\ifcase \sb*st
\or \the\*sb*num
\or \l*alphafalse
\a*c{\*sb*num}
\or \uppercase\expandafter{\romannumeral\the\*sb*num}
\fi
\removelastskip}}
\let\shb=\subheadb
%
\def\setsubheadbnumber#1{\global\*sb*num=#1}%
\let\ssbn=\setsubheadbnumber
%
\long\def\subheadcformat#1{{%
\def\numberingstyle##1{\global\sc*st=1
\edef\T{##1}%
\edef\U{1}%
\edef\V{A}%
\edef\W{I}%
\ifx \T\U % then style=1, the default
\else \ifx \T\V \global\sc*st=2
\else \ifx \T\W \global\sc*st=3
\else \message{<TEXT1> Warning, numbering style
in the subheadcformat command is
invalid. Style 1 will be assumed.}
\fi\fi\fi}%
\long\def\titleformat##1{\global\*subct={##1}}
\def\incontents##1{\global\*TC*shcfalse
\edef\T{##1}%
\edef\U{yes}%
\edef\V{no}%
\ifx \T\U \global\*TC*shctrue
\else \ifx \T\V \global\*TC*shcfalse
\else \message{<TEXT1> Warning, argument to
incontents in subheadcformat is not "yes" or "no".
"no" will be assumed.}
\fi\fi}%
#1}}
\let\shcf=\subheadcformat
%
\def\subheadctitle{}
\def\subheadc#1{% Subheadc revised 11/3/86 (added toclinebreak)
\global\def\subheadctitle{#1}%
\global\advance \*sc*num by 1
\par
\bgroup
\let\toclinebreak=\space
\let\toclbr=\space
\the\*subct % prints the title in the text
\egroup
\if*TC*shc \putincontents1{\the\*sctf}\fi
\ignorespaces}% END subheadc markup
%
\def\subheadcnumber{{\ifcase \sc*st
\or \the\*sc*num
\or \l*alphafalse
\a*c{\*sc*num}
\or \uppercase\expandafter{\romannumeral\the\*sc*num}
\fi
\removelastskip}}
\let\shc=\subheadc
%
\def\setsubheadcnumber#1{\global\*sc*num=#1}%
\let\sscn=\setsubheadcnumber
%
\long\def\subheaddformat#1{{%
\def\numberingstyle##1{\global\sd*st=1
\edef\T{##1}%
\edef\U{1}%
\edef\V{A}%
\edef\W{I}%
\ifx \T\U % then style=1, the default
\else \ifx \T\V \global\sd*st=2
\else \ifx \T\W \global\sd*st=3
\else \message{<TEXT1> Warning, numbering style
in the subheaddformat command is
invalid. Style 1 will be assumed.}
\fi\fi\fi}%
\long\def\titleformat##1{\global\*subdt={##1}}%
\def\incontents##1{\global\*TC*shdfalse
\edef\T{##1}%
\edef\U{yes}%
\edef\V{no}%
\ifx \T\U \global\*TC*shdtrue
\else \ifx \T\V \global\*TC*shdfalse
\else \message{<TEXT1> Warning, argument to
incontents in subheaddformat is not "yes" or "no".
"no" will be assumed.}
\fi\fi}%
#1}}
\let\shdf=\subheaddformat
%
\def\subheaddtitle{}
\def\subheadd#1{% Subheadd revised 11/3/86 (added toclinebreak)
\global\def\subheaddtitle{#1}%
\global\advance \*sd*num by 1
\par
\bgroup
\let\toclinebreak=\space
\let\toclbr=\space
\the\*subdt % This prints the title in the text
\egroup
\if*TC*shd \putincontents1{\the\*sdtf}\fi
\ignorespaces}% END subheadd markup definition
%
\def\subheaddnumber{{\ifcase \sd*st
\or \the\*sd*num
\or \l*alphafalse
\a*c{\*sd*num}
\or \uppercase\expandafter{\romannumeral\the\*sd*num}
\fi
\removelastskip}}
\let\shd=\subheadd
%
\def\setsubheaddnumber#1{\global\*sd*num=#1}%
\let\ssdn=\setsubheaddnumber
%
% FIGURE MARKUP, bth 8/25/86
% Figure altered to allow alignments and other text markups within the
% arguments of figure and allow the immediate print feature (nofloat).
% Footnoting and multiple columns allowed in nofloat format only.
% Floating figures use top insert which uses a vbox that cancels any
% footnoting or multiple column setting. When \fullpage or \halfpage
% are used they must be the only argument in position one.
%
%
% Figureformat revised on 4/5/88, drg
%
\catcode`* = 11
\catcode`@ = 11
\newif\if*fp \*fpfalse % fullpage, used in figure
\newif\if*hp \*hpfalse % halfpage, " "
\newcount\fi*pos \fi*pos=1 % 1=\float,2=\nofloat,3=\midfloat,4=\keep
\newtoks\fi*sb \fi*sb={1\bl}
\newtoks\fi*sa \fi*sa={1\bl}
\def\figureformat#1{{%
\def\skipbefore##1{\global\fi*sb={##1}}%
\def\position{% printing position of figure, floating or nonfloating
\def\nofloat{\global\fi*pos=2} % prints immediate
\def\keep{\global\fi*pos=4} % prints immediate, but on same pg
\def\midfloat{\global\fi*pos=3}% uses midinsert
\def\float{\global\fi*pos=1}} % uses topinsert, the default
\long\def\titleformat##1{\global\*figt={##1}}%
\def\incontents##1{\global\*TC*figtrue
\edef\T{##1}%
\edef\U{yes}%
\edef\V{no}%
\ifx \T\U % Already true
\else \ifx \T\V \global\*TC*figfalse
\else \message{<TEXT1> Warning, argument to
incontents in figureformat is not "yes" or "no".
"yes" will be assumed.}
\fi\fi}%
\def\skipafter##1{\global\fi*sa={##1}}%
#1}}% End figure format markup
\let\fif=\figureformat
%
\newif\if*tpreset % titlepage reset for figure markup
\*tpresetfalse % no reset necessary
%
% Figure revised on 10/4/89, drg
%
\def\figuretitle{}
\def\figure{\futurelet\next\*fga}
\def\*fga{\ifcat\bgroup\noexpand\next \let\next\*fgb
\else\let\next\*fgc\fi \next}
\def\*fgb{\global\setbox\A=\vbox\bgroup\aftergroup\*fgd\let\next}
\def\*fgc#1{\*fge{#1}}
\def\*fgd{\*fge{\box\A}}
\long\def\*fge#1#2{\par % Begin figure markup definition
\gdef\figuretitle{#2}%
\global\advance \fi*n by 1 % figure number
\begingroup % trap null setting for lets
\let\fullpage=\null % make fullpage non-printable
\let\halfpage=\null % make halfpage non-printable
\let\toclinebreak=\space % prevent break in title
\let\toclbr=\space % prevent break in title
% for value of \fi*pos: 1=\float,2=\nofloat,3=\midfloat,4=\keep
\ifcase\fi*pos
\or % BEGIN TOPINSERT FIGURES
\if*fp % full page topinsert figure
\if*title\*tpresettrue\notitlepage\fi % account for titlepage
\topinsert % floating figures are topinserts
\if*TC*fig \putincontents2{\the\*ftf}\fi
\vbox to\vsize{\vrule width0pt\relax
\vfil#1\the\*figt}
\endinsert
\if*tpreset\titlepage\*tpresetfalse\fi % reset titlepage
\else\if*hp % half page topinsert figure
\topinsert
\if*TC*fig \putincontents2{\the\*ftf}\fi
\vbox to.5\vsize{\vrule width0pt \relax
\vskip\the\fi*sb\relax
\vfil#1\the\*figt
\vskip\the\fi*sa\relax}
\endinsert
\else % variable size floating figure
\topinsert
\if*TC*fig \putincontents2{\the\*ftf}\fi
\vskip\the\fi*sb\relax
#1\the\*figt
\vskip\the\fi*sa\relax
\endinsert
\fi\fi % end float full and half page check
\or % BEGIN IMMEDIATE FIGURES
\if*fp % FULL PAGE IMMEDIATE FIGURE
\np % figure won't fit on current page
\if*TC*fig \putincontents2{\the\*ftf}\fi % send to contents
\vrule width0pt \relax % prevent fil from going away
\vfill\the\*figt % fill to figure title
\break % insures break at end of insert
\else
\if*hp % HALF PAGE IMMEDIATE FIGURE
\dimen\D=.5\vsize % depth check for half page figure
\advance\dimen\D by\topskip % add topskip to .5 vsize
\ifdim\pagetotal>\dimen\D\np\fi % won't fit on current page
\vbox to.49\vsize{\vrule width0pt % keep skip
\vfil\relax % skip all but title height to
#1\the\*figt % print figure title
\vskip\the\fi*sa\relax} % print half page figure title
\if*TC*fig \putincontents2{\the\*ftf}\fi
\else % VARIABLE SIZE IMMEDIATE FIGURE
\vrule width0pt \relax % prevent skip from going away
\vskip\the\fi*sb\relax
#1\the\*figt
\vskip\the\fi*sa\relax
\if*TC*fig \putincontents2{\the\*ftf}\fi
\fi% End of check at half page
\fi % End of check at full page
\or % BEGIN MIDINSERT FIGURES
\if*fp % full page midinsert figure
\if*title\*tpresettrue\notitlepage\fi % account for titlepage
\topinsert % use topinsert for full page only
\if*TC*fig \putincontents2{\the\*ftf}\fi
\vbox to\vsize{\vrule width0pt\relax
\vfil#1\the\*figt}
\endinsert
\if*tpreset\titlepage\*tpresetfalse\fi % reset titlepage
\else\if*hp % half page midinsert figure
\midinsert
\if*TC*fig \putincontents2{\the\*ftf}\fi
\vbox to.5\vsize{\vrule width0pt \relax
\vskip\the\fi*sb\relax
\vfil#1\the\*figt
\vskip\the\fi*sa\relax}
\endinsert
\else % variable size floating figure
\midinsert
\if*TC*fig \putincontents2{\the\*ftf}\fi
\vskip\the\fi*sb\relax
#1\the\*figt
\vskip\the\fi*sa\relax
\endinsert
\fi\fi % end float full and half page check
\or % BEGIN IMMEDIATE KEEP FIGURES
\if*fp % FULL PAGE IMMEDIATE FIGURE
\np % figure won't fit on current page
\if*TC*fig \putincontents2{\the\*ftf}\fi % send to contents
\vrule width0pt \relax % prevent fil from going away
\vfill\the\*figt % fill to figure title
\break % insures break at end of insert
\else
\if*hp % HALF PAGE IMMEDIATE FIGURE
\dimen\D=.5\vsize % depth check for half page figure
\advance\dimen\D by\topskip % add topskip to .5 vsize
\ifdim\pagetotal>\dimen\D\np\fi % won't fit on current page
\vbox to.49\vsize{\vrule width0pt % keep skip
\vfil\relax % skip all but title height to
#1\the\*figt % print figure title
\vskip\the\fi*sa\relax} % print half page figure title
\if*TC*fig \putincontents2{\the\*ftf}\fi
\else % VARIABLE SIZE IMMEDIATE FIGURE
\vrule width0pt \relax % prevent skip from going away
\vskip\the\fi*sb\relax
\vbox{#1\the\*figt
\vskip\the\fi*sa\relax}
\if*TC*fig \putincontents2{\the\*ftf}\fi
\fi% End of check at half page
\fi % End of check at full page
\fi % End of case statement
\endgroup % end trap for null settings
\global\*fpfalse % reset full page
\global\*hpfalse % reset half page
}% End figure markup
\let\fig=\figure % abbreviation for figure markup
%
\def\fullpage{\global\*fptrue}% used in figure markup
\def\halfpage{\global\*hptrue}% used in figure markup
%
\def\figurenumber{\the\fi*n}%
%
\def\HFN#1{\laf{\labelwidth{\fi*hi}}\label{#1}}%
%
\def\setfigurenumber#1{\global\fi*n=#1}%
\let\sfn=\setfigurenumber
%
% Redefined from PLAIN TEX
%
\def\topinsert{\@midfalse\p@gefalse\t*ptrue\@ins}
%
\def\midinsert{% redefine from plain tex
\@midtrue
\if*fix % don't change meaning in fixed mode
\else % change midinsert to topinsert in flex mode
\if*dbl\global\@midfalse\fi % leave old meaning in single column mode
\if*tpl\global\@midfalse\fi %
\fi\@ins} %
%
\def\@ins{\par\begingroup
\if*fix % do nothing in fixed mode
\else\ift*p\hsize=\*txtw\fi\fi % ift*p hsize of insert set
\setbox0=\vbox\bgroup} % insert set to full page width
%
% Tables
%
\def\tableformat#1{{%
\long\def\titleformat##1{\global\*tabt={##1}}%
\def\incontents##1{\global\*TC*tabtrue
\edef\T{##1}%
\edef\U{yes}%
\edef\V{no}%
\ifx \T\U % Already true
\else \ifx \T\V \global\*TC*tabfalse
\else \message{<TEXT1> Warning, argument to
incontents in tableformat is not "yes" or "no".
"yes" will be assumed.}
\fi\fi}%
#1}}
\let\taf=\tableformat
%
\def\tabletitle#1{{% Tabletitle revised 11/3/86 (added toclinebreak)
\def\tabletitle{#1}%
\global\advance \ta*n by 1
\par
\bgroup
\let\toclinebreak=\space
\let\toclbr=\space
\the\*tabt % prints the title in the text
\egroup
\par
\if*TC*tab \putincontents3{\the\*ttf}\fi
}}% END tabletitle markup definition
\let\tat=\tabletitle
%
\def\tablenumber{\the\ta*n}
\def\HTN#1{\laf{\labelwidth{\ta*hi}}\label{#1}}
%
\def\settablenumber#1{\global\ta*n=#1}%
\let\stn=\settablenumber
%
% The \gutter macro is actually used for several macros, \bul, \lil, etc.
%
\newdimen\*gut
\def\gutter#1{\*gut=#1}
% End of the Item macros (DRG)
%
% Macros specific for the 8600 (JKW) revision 11/25/86
%
\newskip\evenmar
\newskip\oddmar
\evenmar=0pt
\oddmar=0pt
\def\evenpagemargin#1{{\setbox0=\hbox{\global\evenmar=#1 pt}}
\special{even_page_margin=\the\evenmar}}%
\let\epm=\evenpagemargin
\def\oddpagemargin#1{{\setbox0=\hbox{\global\oddmar=#1 pt}}
\special{odd_page_margin=\the\oddmar}}%
\let\opm=\oddpagemargin
\def\linenumberfont#1{\B={#1}
\special{line_number_font=\the\B}}%
\let\lnf=\linenumberfont
\def\poplevel#1{\B={#1}
\special{pop_level=\the\B}}%
\let\ppl=\poplevel
\def\lineinterval#1{\B={#1}
\special{line_interval=\the\B}}%
\let\lint=\lineinterval
\def\numberinglines#1{\special{numbering_lines=#1}}%
\let\numl=\numberinglines
\def\countinglines#1{\special{counting_lines=#1}}%
\let\coul=\countinglines
\def\printingnumbers#1{\special{printing_numbers=#1}}%
\let\prin=\printingnumbers
\def\linefootnotereference{\special{line_footnote_reference}}%
\let\lfnr=\linefootnotereference
%
% To be able to use PLAIN.TEX math code
%
\def\plaintexmathon{%
\catcode`\$=3\relax
\catcode`@=12\relax}
\let\dollarmathon=\plaintexmathon
\def\atmathon{%
\catcode`\$=12\relax
\catcode`@=3\par}
%
\outer\def\bye{\par\onecolumn\vfill\supereject\end} % redefined from PLAIN.TEX
% to close multiple column routines
%
% MULTIPLE COLUMNS
% Brian Harvey 1/20/85
%
% Macros to be imbedded into TEXT1@@ to drive the multiple column
% routines FLEXC@L and FIXC@L.
%
\newbox\*lftcol % left column box, fixed column mode, TeXbook name
\newbox\*midcol % center column, fixed column mode, TeXbook name
\newbox\*ppage % page accummulated before multicolumn, partialpage, flex
\newcount\*pcount % counter for empty page macro, keeps track of the
\*pcount=0 % number of empty page calls
\newdimen\*bigch % Twc=2vise, Thc=3vsize---bigcolumnheight
\newdimen\*txtw % textwidth, stores full hsize for multicolumn mode
\let\galleywidth=\*txtw % create galleywidth = text width
\newdimen\*txth % textheight, stores page height for multicolumn mode
\*txtw=\hsize % initialize full page text width for multicolumn mode
\*txth=\vsize % initialize full text height for multicolumn mode
\newif\ift*p % ift*p required to check for midinsert in flex mode
\newif\if*dbl % double column indicator
\*dblfalse % set double column format indicator false
\newif\if*tpl % triple column indicator
\*tplfalse % set triple column format indicator false
\newif\if*fix % format indicator (fixed if true, otherwise flexible)
\newif\if*norule % used to suppress rules in output routines
\newif\if*plain % check for plain.tex, plainoutput
\*plaintrue % set plain format indicator true
\newtoks\*twcw % width for twocolumns
\newtoks\*thcw % width for threecolumns
\newtoks\*twcgut % gutter for twocolumns
\newtoks\*thcgut % gutter for threecolumns
\newtoks\*clrw % rule width between multiple columns
\newtoks\*mskb % skip before multicolumn format
\newtoks\*mska % skip after multicolumn format
\*twcw={.48\*txtw} % initialize column and gutter default widths
\*thcw={.31\*txtw}
\*twcgut={.04\*txtw}
\*thcgut={.035\*txtw}
\*clrw={0.0pt} % initialize between column rule width
\*mskb={6pt plus 3pt minus 2pt} % initialize skips before and after multiple columns:
\*mska={6pt plus 3pt minus 2pt} % used in multiple column flex mode only
\def\fixedformat{\global\*fixtrue} % calls fixed format file
\let\fixf=\fixedformat
\global\*fixfalse % sets up flex format
%
\def\multicolumnformat#1{% format macro for both fixed and flexible, texblock is multicol
\def\twocolumnwidth##1{\global\*twcw={##1}}%
\def\threecolumnwidth##1{\global\*thcw={##1}}%
\def\twocolumngutter##1{\global\*twcgut={##1}}%
\def\threecolumngutter##1{\global\*thcgut={##1}}%
\def\columnrulewidth##1{\global\*clrw={##1}}%
\def\skipbefore##1{\global\*mskb={##1}}% flex mode only
\def\skipafter##1{\global\*mska={##1}}% flex mode only
#1\*txtwck}% END, multicol format
\let\mcf=\multicolumnformat
%
% COLUMN WIDTH CHECK FOR MULTIPLE COLUMN ROUTINES
%
\def\*txtwck{% check column width and gutters against hsize
\dimen@=\the\*twcw
\dimen@=2\dimen@
\dimen1=\the\*twcgut
\advance\dimen@ by\dimen1
\ifdim\dimen@ > \*txtw % if greater than current pagewidth
\dimen1=\dimen@
\advance\dimen1 by-\*txtw
\advance\dimen@ by -\*txtw
\ifdim\dimen@ > 1pt % only warn if over 1pt
\immediate\write16{%
<TEXT1> Warning! The column and gutter widths specified%
for two columns are wider than the current pagewidth by%
\the\dimen1 . }
\fi
\else\ifdim\dimen@ < \*txtw % if less than current pagewidth
\dimen1=\*txtw
\advance\dimen1 by-\dimen@
\advance\dimen@ by -\*txtw
\multiply\dimen@ by -1
\ifdim\dimen@ > 1pt % Only warn if over 1pt difference
\immediate\write16{%
<TEXT1> Warning! The column and gutter widths specified%
for two columns are shorter than the current pagewidth by%
\the\dimen1 . }
\fi
\fi\fi
%
\dimen@=\the\*thcw % width of each column, three columns
\dimen@=3\dimen@ % three columns
\dimen1=\the\*thcgut % width of the gutters
\dimen1=2\dimen1 % two gutters in three columns
\advance\dimen@ by\dimen1 % add columns and gutters together
\ifdim\dimen@ > \*txtw % if greater than current pagewidth
\dimen1=\dimen@
\advance\dimen1 by-\*txtw
\advance\dimen@ by -\*txtw
\ifdim\dimen@ > 1pt % only warn if over 1pt
\immediate\write16{%
<TEXT1> Warning! The column and gutter widths specified%
for three columns are wider than the current pagewidth by%
\the\dimen1 . }
\fi
\else\ifdim\dimen@ < \*txtw % if less than current pagewidth
\dimen1=\*txtw
\advance\dimen1 by-\dimen@
\advance\dimen@ by -\*txtw
\multiply\dimen@ by -1
\ifdim\dimen@ > 1pt % Only warn if over 1pt difference
\immediate\write16{%
<TEXT1> Warning! The column and gutter widths specified%
for three columns are shorter than the current pagewidth by%
\the\dimen1 . }
\fi
\fi\fi
} % END, widthcheck
%
\newif\if*start*mc \*start*mcfalse
\def\twocolumns{% TWOCOLUMNS set-up macro
\if*fix \input fixcol % input fixed format file
\immediate\write-16{% write to log file only
<TEXT1> Fixed format for multiple columns in effect. }
\gdef\twocolumns{\*fixtwc}% redefine twocolumns, fixed mode
\gdef\threecolumns{\*fixthc}% redefine threecolumns, fixed mode
\else \input flexcol % input flex format file
\immediate\write-16{% write to log file only
<TEXT1> Flexible format for multiple columns in effect. }
\gdef\twocolumns{\*flextwc}% redefine twocolumns, flex mode
\gdef\threecolumns{\*flexthc}\fi% redefine threecolumns, flex mode
\twocolumns
\global\let\twc=\twocolumns % to current meaning of twocolumns
\global\let\thc=\threecolumns % to current meaning of threecolumns
}% END twocolumns markup
%
\let\twc=\twocolumns
%
\def\threecolumns{% THREECOLUMNS set-up macro
\*start*mctrue
\if*fix \input fixcol % input fixed format file
\immediate\write-16{% write to log file only
<TEXT1> Fixed format for multiple columns active. }
\gdef\twocolumns{\*fixtwc}% redefine twocolumns, fixed mode
\gdef\threecolumns{\*fixthc}% redefine threecolumns, fixed mode
\else \input flexcol % input flex format file
\immediate\write-16{% write to log file only
<TEXT1> Flexible format for multiple columns active. }
\gdef\twocolumns{\*flextwc}% redefine twocolumns, flex mode
\gdef\threecolumns{\*flexthc}\fi% redefine threecolumns, flex mode
\threecolumns
\global\let\twc=\twocolumns % to current meaning of twocolumns
\global\let\thc=\threecolumns % to current meaning of threecolumns
}% End threecolumns markup
%
\let\thc=\threecolumns
%
\let\onecolumn=\null % Empty definition for single format
\let\oc=\onecolumn
%
\let\newcolumn=\newpage
\let\nc=\newpage
\newif\if*nc \*ncfalse % true if \nc was used in mult cols
%
\global
\newhelp\balerrhelp{onecolumn The best approach to solve this problem
is to shorten the text by a line. You could also add or delete a
paragraph or change the column size. }%
%
% Here are the macros necessary for doing an index
%
\newtoks\*ixarc \*ixarc={case=no} % IndeX A Respect Case
\newcount\*ixpn % Page number type: 0,2,4,6, or 9
\newtoks\*ixast \*ixast={style=3} % IndeX A STyle
\newtoks\*ixald \*ixald={leadering=no} % IndeX A LeaDering
\newtoks\*ixabr \*ixabr={\vs{1\bl}} % IndeX A BReak
\newtoks\*ixasea \*ixasea={1em} % IndeX A SubEntry 1
\newtoks\*ixaseb \*ixaseb={2em} % IndeX A SubEntry 2
\newtoks\*ixaev \*ixaev={\tenpt} % Index A every time
\newtoks\*ixahp \*ixahp={1.5em} % Index A hang indent
\newtoks\*ixbrc \*ixbrc={case=no} % IndeX B Respect Case
\newtoks\*ixbst \*ixbst={style=3} % IndeX B STyle
\newtoks\*ixbld \*ixbld={leadering=no} % IndeX B LeaDering
\newtoks\*ixbbr \*ixbbr={\vs{1\bl}} % IndeX B BReak
\newtoks\*ixbsea \*ixbsea={1em} % IndeX B SubEntry 1
\newtoks\*ixbseb \*ixbseb={2em} % IndeX B SubEntry 2
\newtoks\*ixbev \*ixbev={\tenpt} % Index B every time
\newtoks\*ixbhp \*ixbhp={1.5em} % Index B hang indent
\newtoks\*ixcrc \*ixcrc={case=no} % IndeX C Respect Case
\newtoks\*ixcst \*ixcst={style=3} % IndeX C STyle
\newtoks\*ixcld \*ixcld={leadering=no} % IndeX C LeaDering
\newtoks\*ixcbr \*ixcbr={\rule\vs{1\bl}} % IndeX C BReak
\newtoks\*ixcsea \*ixcsea={1em} % IndeX C SubEntry 1
\newtoks\*ixcseb \*ixcseb={2em} % IndeX C SubEntry 2
\newtoks\*ixcev \*ixcev={\tenpt} % Index C every time
\newtoks\*ixchp \*ixchp={1.5em} % Index C hang indent
%
\newcount\*ixlvl \*ixlvl=1 % IndeX LeVeL
%
\long\def\indexformat#1#2{{\ifnum #1>3 \message{<TEXT1> Error! Only three indices
allowed. Level 1 will be used.}
\*ixlvl=1
\else \*ixlvl=#1\fi
\def\respectcase##1{\edef\T{yes}
\edef\U{no}
\edef\V{##1}
\ifx \T\V \B={case=yes}
\else \B={case=no}
\ifx \U\V % Already set
\else\message{<TEXT1> Error!! Case respect not "yes"
or "no" in indexformat. "no" will be used.}
\fi\fi
\ifcase \*ixlvl \or \global\*ixarc=\B
\or \global\*ixbrc=\B
\or \global\*ixcrc=\B
\fi}
\def\style##1{\edef\T{paragraph}
\edef\U{dash}
\edef\V{indent}
\edef\W{##1}
\ifx \T\W \B={style=1} % paragraph style
\else \ifx \U\W \B={style=2} % dash style
\else \B={style=3} % indented style
\ifx \V\W % Already done
\else \message{<TEXT1> Error!! Style invalid in indexformat.
"indented" will be used.}
\fi\fi\fi
\ifcase \*ixlvl \or \global\*ixast=\B
\or \global\*ixbst=\B
\or \global\*ixcst=\B
\fi}
\def\leadering##1{\edef\T{yes}
\edef\U{no}
\edef\V{##1}
\ifx\T\V \B={leadering=yes}
\else \B={leadering=no}
\ifx\U\V
\else \message{<TEXT1> Error!! Only "yes" and "no" can
be used in the indexformat. "no" will be assumed.}
\fi\fi
\ifcase \*ixlvl \or \global\*ixald=\B
\or \global\*ixbld=\B
\or \global\*ixcld=\B
\fi
}
\long\def\everyletterbreak##1{\ifcase \*ixlvl \or \global\*ixabr={##1}
\or \global\*ixbbr={##1}
\or \global\*ixcbr={##1}
\fi}
\def\everyindex##1{\ifcase \*ixlvl \or \global\*ixaev={##1}
\or \global\*ixbev={##1}
\or \global\*ixcev={##1}
\fi}
\def\everyhang##1{\ifcase \*ixlvl \or \global\*ixahp={##1}
\or \global\*ixbhp={##1}
\or \global\*ixchp={##1}
\fi}
\def\indentsubentry##1##2{\R = ##1
\ifnum ##1<1 \message{<TEXT1> Error!! Subentry level number in indexformat
may only be 1 or 2. 1 will be used.}
\R = 1
\else \ifnum ##1>2 \message{<TEXT1> Error!! Subentry level number in indexformat
may only be 1 or 2. 1 will be used.}
\R = 1
\fi\fi
\ifcase \R \or \ifcase \*ixlvl \or \global\*ixasea={##2}
\or \global\*ixbsea={##2}
\or \global\*ixcsea={##2}
\fi
\or \ifcase \*ixlvl \or \global\*ixaseb={##2}
\or \global\*ixbseb={##2}
\or \global\*ixcseb={##2}
\fi
\fi}
#2}}
\newwrite\*ixfilea % IndeX FILE A
\newwrite\*ixfileb % IndeX FILE B
\newwrite\*ixfilec % IndeX FILE C
\newif\if*ixaopen \*ixaopenfalse % IndeX file A OPEN?
\newif\if*ixbopen \*ixbopenfalse % IndeX file B OPEN?
\newif\if*ixcopen \*ixcopenfalse % IndeX file C OPEN?
\def\*openixfile#1{\ifcase #1 \or
\immediate\openout\*ixfilea=text1$$.IX1%
\global\*ixaopentrue
\immediate\write\*ixfilea{\the\*ixarc}%
\immediate\write\*ixfilea{\the\*ixast}%
\immediate\write\*ixfilea{\the\*ixald}%
\or \immediate\openout\*ixfileb=text1$$.IX2%
\global\*ixbopentrue
\immediate\write\*ixfileb{\the\*ixbrc}%
\immediate\write\*ixfileb{\the\*ixbst}%
\immediate\write\*ixfileb{\the\*ixbld}%
\or \immediate\openout\*ixfilec=text1$$.IX3%
\global\*ixcopentrue
\immediate\write\*ixfilec{\the\*ixcrc}%
\immediate\write\*ixfilec{\the\*ixcst}%
\immediate\write\*ixfilec{\the\*ixcld}%
\fi}
{\catcode`\$=12
\global\def\index#1#2{{\global\*ixpn = 2
\def\subentry##1##2{${$}se##1##2{$}}%
\def\bdpn{\global\*ixpn = 0}%
\def\uspn{\global\*ixpn = 4}%
\def\itpn{\global\*ixpn = 6}%
\def\blindentry##1{\global\*ixpn = 9}%
\def\sortas##1{${$}sa##1{$}}%
\def\dagger{ \noexpand\dagger}%
\def\ddagger{ \noexpand\ddagger}%
\def\\{\noexpand\\}%
\def\{{\noexpand\{}%
\def\}{\noexpand\}}%
\def\_{\noexpand\_}%
\def\@{\noexpand\@}%
\def\S{\noexpand\S}%
\def\P{\noexpand\P}%
\def\L{\noexpand\L}%
\def\AA{\noexpand\AA}%
\def\neg{\noexpand\neg}%
\def\tilde{\noexpand\tilde}%
\def\vbar{\noexpand\vbar}%
\def\roman{\noexpand\rm}\let\rm=\roman%
\def\bold{\noexpand\bd}\let\bd=\bold%
\def\italic{\noexpand\it}\let\it=\italic%
\def\typewriter{\noexpand\tt}\let\tt=\typewriter%
\def\caps{\noexpand\cc}\let\cc=\caps%
\def\mathitalic{\noexpand\mi}\let\mi=\mathitalic%
\def\symbol{\noexpand\sy}\let\sy=\symbol%
\def\extension{\noexpand\ex}\let\ex=\extension%
\def\bolditalic{\noexpand\bi}\let\bi=\bolditalic%
\setbox0=\vbox{\hsize=100in#2}%
\def\bdpn{}%
\def\uspn{}%
\def\itpn{}%
\def\blindentry##1{${$}be##1{$}}%
\*ixlvl = #1
\ifcase #1 \message{<TEXT1> Error!! You can only have index level 1, 2, or 3.
Index level 1 will be used.}
\*ixlvl = 1
\or\or\or% % These levels are ok
\else \message{<TEXT1> Error!! You can only have index level 1, 2, or 3.
Index level 1 will be used.}
\*ixlvl = 1
\fi%
\edef\*ixtoken{#2}%
\edef\temp{\*ixtoken}%
\ifcase \*ixlvl \or\if*ixaopen\else\*openixfile1\fi% Open the file if not done yet
\immediate\write\*ixfilea{{\the\*ixpn}{\the\pageno}{\pagenumber}\*ixtoken}%
\or \if*ixbopen \else \*openixfile2 \fi % Open the file if not done yet
\immediate\write\*ixfileb{{\the\*ixpn}{\the\pageno}{\pagenumber}\*ixtoken}%
\or \if*ixcopen \else \*openixfile3 \fi % Open the file if not done yet
\immediate\write\*ixfilec{{\the\*ixpn}{\the\pageno}{\pagenumber}\*ixtoken}%
\fi}\ignorespaces}
}% End math cat code change
\def\everyletterbreak#1#2{\def\nextletter{#2}
\ifcase #1 \or \the\*ixabr
\or \the\*ixbbr
\or \the\*ixcbr
\fi}
\def\everyindex#1{\ifcase \*ixlvl \or \the\*ixaev
\or \the\*ixbev
\or \the\*ixcev
\fi}
\def\indentsubentry#1#2{\par\penalty5000\hp
\ifcase #2 \or \ifcase #1 \or \hs{\the\*ixasea}
\or \hs{\the\*ixbsea}
\or \hs{\the\*ixcsea}
\fi
\or \ifcase #1 \or \hs{\the\*ixaseb}
\or \hs{\the\*ixbseb}
\or \hs{\the\*ixcseb}
\fi
\fi}
\let\ix=\index
\let\*ix=\printindex
\def\printindex#1{\*ix#1
\ifcase #1 \or \input text1$$.ix1
\or \input text1$$.ix2
\or \input text1$$.ix3
\fi}
\def\@{\char'100{}}%
%
% and set default values
%
\hfuzz=1pt
\parindent=24pt \parskip=0pt plus 3pt minus 0pt
\normalbottom
\pageno=0
\catcode`* = 12
% The END